세 수의 합

NYPC 2018 · 본선

NN장의 카드가 있다. 각각의 카드에는 서로 다른 정수가 쓰여 있어서, 모두 NN개의 서로 다른 정수가 주어져 있다. 이 정수들을 차례로 A[1]A[1], A[2]A[2], A[3]A[3], ..., A[N]A[N]이라고 하자. 여러분이 할 일은, 정수 WW가 주어졌을 때, 이 카드 중 서로 다른 세 장을 골라서 여기에 쓰여진 세 수의 합이 W가 되는 경우가 몇 가지가 있는 지 알아내는 것이다.

예를 들어, N=6N=6이고 다음과 같이 여섯 개의 정수들이 주어졌다고 하자.

321157133 \quad 2 \quad 11 \quad 5 \quad 7 \quad 13

만약 W=15W=15로 주어졌다면, 이 중 33, 55, 77을 고르면 3+5+7=153+5+7=15이므로 조건을 만족하고, 다른 방법으로 1515를 만들 수는 없으므로 세 수의 합이 1515가 되는 경우는 총 11가지이다. 만약 W=28W=28로 주어졌다면, 어떤 세 수를 고르더라도 합이 2828이 되는 경우를 만들 수 없으므로 세 수의 합이 2828이 되는 경우는 총 0가지이다.

NN, WW, A[1]A[1], A[2]A[2], \cdots, A[N]A[N]이 주어졌을 때 A[1]A[1], A[2]A[2], ..., A[N]A[N] 중 서로 다른 세 수의 합이 W가 되는 경우의 수를 구하는 프로그램을 작성하시오.

입력 형식

첫째 줄에 두 정수 NN, WW가 주어진다. NN은 주어지는 서로 다른 정수의 개수이며, WW는 이 중 서로 다른 세 수를 더해서 만들고 싶은 합에 해당하는 수이다. 문제의 정의상 3N50003 \le N \le 5\,000, 6W30000000006 \le W \le 3\,000\,000\,000을 만족한다.

두번째 줄에는 NN개의 서로 다른 정수 A[1]A[1], A[2]A[2], A[3]A[3], \cdots, A[N]A[N]이 주어진다. 이 수들은 각각 11 이상 10000000001\,000\,000\,000 이하의 범위에 있다.

출력 형식

출력은 한 줄로 구성된다. 첫 줄에는 주어진 A[1]A[1], A[2]A[2], ..., A[N]A[N] 중 서로 다른 세 수를 골라서 이 수의 합이 WW가 되게 만들 수 있는 가짓수를 출력한다. 만약 합이 WW가 되게 할 수 없다면, 00을 출력한다.

예제 1

입력

6 15 3 2 11 5 7 13

출력

1

예제 2

입력

3 6 1 2 3

출력

1

예제 3

입력

7 10 1 2 3 4 5 6 7

출력

4

채점 방식

입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.

종류 1: 13

N300N \le 300

종류 2: 31

W1000000W \le 1\,000\,000

종류 3: 56

별다른 제약조건 없음.

해설