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 JAVA (judge verdict: Time Limit Exceeded)

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		while (true) {
			int n = sc.nextInt();
			int S = sc.nextInt();
			if ((n | S) == 0)
				break;
			int[] r = new int[n];
			// int[] c = new int[101];
			// int sum = 0;
			for (int i = 0; i < n; i++) {
				r[i] = sc.nextInt();
				// c[r[i]]++;
			}
			// for (int i = 1; i < S; i++) {
			// sum += c[i];
			// }
			// int ans = 0;
			// for (int i = S - 1; i >= (S + 1) / 2; i--) {
			// for (int j = S - i; j <= i; j++) {
			// if (i == j) {
			// ans += c[i] * (c[i] - 1) / 2;
			// // if (c[i] != 0)
			// // System.out.println(i + " " + j + " " + c[i]
			// // * (c[i] - 1) / 2);
			// } else {
			// ans += c[i] * c[j];
			// // if (c[i] != 0 && c[j] != 0)
			// // System.out.println(i + " " + j + " " + c[i] * c[j]);
			// }
			// }
			// }
			// ans += (n - sum) * (n - sum - 1) / 2;
			// System.out.println(ans);
			int ans = 0;
			for (int i = 0; i < n; i++) {
				for (int j = i + 1; j < n; j++) {
					if (r[i] + r[j] > S)
						ans++;
				}
			}
			System.out.println(ans);
		}
	}
}