import java.util.Scanner

import scala.collection.Searching._
import scala.annotation.tailrec
import scala.collection.immutable.Queue

class IUnionFind(val size: Int) {

  private case class Node(var parent: Option[Int], var treeSize: Int)

  private val nodes = Array.fill[Node](size)(new Node(None, 1))

  def union(t1: Int, t2: Int): IUnionFind = {
    if (t1 == t2) return this

    val root1 = root(t1)
    val root2 = root(t2)
    if (root1 == root2) return this

    val node1 = nodes(root1)
    val node2 = nodes(root2)

    if (node1.treeSize < node2.treeSize) {
      node1.parent = Some(t2)
      node2.treeSize += node1.treeSize
    } else {
      node2.parent = Some(t1)
      node1.treeSize += node2.treeSize
    }
    this
  }

  def connected(t1: Int, t2: Int): Boolean = t1 == t2 || root(t1) == root(t2)

  @tailrec
  private def root(t: Int): Int = nodes(t).parent match {
    case None => t
    case Some(p) => root(p)
  }
}


object Main {
  def solve(sc: => Scanner): Unit = {
    val n, S = sc.nextInt
    if (n != 0 && S != 0) {
      val memo = Array.fill(101)(0)
      for (_ <- 0 until n) {
        memo(sc.nextInt) += 1
      }
      for (i <- 0 until 100) {
        memo(i + 1) += memo(i)
      }
      var ans = 0
      for (i <- 1 to (S - 1) / 2) {
        ans += (memo(i) - memo(i - 1)) * (memo(100) - memo(S - i))
        //println((memo(i) - memo(i - 1)) , (memo(100) - memo(S - i)))
      }
      if (S % 2 == 0) {
        ans += memo(S / 2) * (memo(S / 2) + 1) / 2
      }


      println(ans)
      System.gc()
      solve(sc)
    }
  }

  def main(args: Array[String]): Unit = {
    val sc: Scanner = new Scanner(System.in)

    solve(sc)
  }
}