#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long lint;
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define nmax 1024
#define lmax 1048576
#define Hmax 666013
#define mask 1048575
#define f(x) ((x%Hmax))
void Add(int x,int vB[],int urmB[],int nrB[],int B[],int &zB)
{
int H=f(x),i;//((x&mask)*103)&mask,i;
if(!vB[H])
{
vB[H]=++zB;
urmB[zB]=0;
nrB[zB]=x;
B[zB]=1;
return;
}
for(i=vB[H];nrB[i]!=x&&urmB[i];i=urmB[i]);
if(nrB[i]==x)
{
B[i]++;
return ;
}
urmB[i]=++zB;
nrB[zB]=x;
B[zB]=1;
urmB[zB]=0;
}
int find(int x,int vB[],int urmB[],int nrB[],int B[])
{
int H=f(x),i;//((x&mask)*103)&mask,i;
for(i=vB[H];i;i=urmB[i])
if(nrB[i]==x)
return B[i];
return 0;
}
int n,S,A[nmax];
int urmB[nmax],nrB[nmax],vB[Hmax],zB,B[nmax];
lint sol;
int main()
{
FILE *fi=fopen("oite.in","r"),*fo=fopen("oite.out","w");
fscanf(fi,"%d %d",&n,&S);
int i,j,x,k;
FOR(i,0,n)
fscanf(fi,"%d",&A[i]),Add(A[i],vB,urmB,nrB,B,zB);
fclose(fi);
sort(A,A+n);
FOR(i,0,n) FOR(j,i+1,n)
{
x=S-(A[i]+A[j]);
if(x<0)
continue;
FOR(k,j+1,n)
{
x-=A[k];
if(x<0)
break;
sol+=find(x,vB,urmB,nrB,B);
if(A[i]==x)
sol--;
if(A[j]==x)
sol--;
if(A[k]==x)
sol--;
x+=A[k];
}
}
printf("%lld\n",sol);
fprintf(fo,"%lld\n",sol/4);
fclose(fo);
return 0;
}