Problem:
Problem B: Spellcasters

n 人の魔法使いがいる。彼らには 1 から n までの番号があり、i 番目の魔法使いは魔力 ri ( 1 ≤ i ≤ n ) を持っている。いま彼らは強力な魔法使いと対峙しており、その敵の魔力は S である。n 人の魔法使いは協力して戦うのが得意で、特に 2 人で協力して戦うことを好む。2 人の魔法使いが協力した場合、魔力は単純にその和となり、強力な魔法などを駆使してある程度強い敵にも勝てるようになる。あなたの仕事は魔力 S を持つ敵に対して勝つことができる魔法使いのペア (i, j) ( i ≠ j かつ 1 ≤ i ≤ n かつ 1 ≤ j ≤ n ) の総数を出力することである。ただし (i, j) と (j, i) は同じ組として数える。一方の魔力が他方の魔力よりも大きいとき、大きい魔力を持っている側が勝つ。等しい場合は相打ちで勝ったことにならない。

Input

入力は複数のテストケースからなる。 各テストケースは以下の形式に従う。

n S
r1
r2
…
rn

各変数の意味は問題文中の通りである。
入力の終わりは、ふたつの0が一文字の空白で区切られる一行で示される。

Constraints

入力はすべて整数

1 ≤ n ≤ 20,000

1 ≤ ri ≤ 100 ( 1 ≤ i ≤ n )

1 ≤ S ≤ 100

テストケースの数は 100 を超えない。

Output

条件を満たす組 (i, j) (i ≠ j) の総数を各ケースに付き 1 行に出力せよ。

Sample Input

3 7
1
3
10
0 0

Sample Output

2

Solution in JavaScript (judge verdict: Time Limit Exceeded)

var input = require('fs').readFileSync('/dev/stdin', 'utf8');
var Arr=(input.trim()).split("\n");
while(true){
   var nS=Arr.shift().split(" ").map(Number);
   var n=nS[0];
   var S=nS[1];
   if(n==0 && S==0)break;
   var arr=[];
   for(var i=0;i<n;i++){
      var r=Arr.shift()-0;
      arr.push(r);
   }
   arr.sort(function(a,b){return a-b;});
   var A=[];
   for(var i=0;i<=200;i++)A[i]=0;
   for(var i=0;i<n;i++){
      for(var j=i+1;j<n;j++){
         A[arr[i]+arr[j]]++;
      }
   }
   var cnt=0;
   for(var i=S+1;i<=200;i++)cnt+=A[i];
   console.log(cnt);
}