#include <stdio.h>
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];
int urmC[lmax],nrC[lmax],vC[Hmax],zC,C[lmax];
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;
FOR(i,0,n)
fscanf(fi,"%d",&A[i]),Add(A[i],vB,urmB,nrB,B,zB);
fclose(fi);
FOR(i,0,n) FOR(j,i+1,n)
Add(A[i]+A[j],vC,urmC,nrC,C,zC);
FOR(i,0,n) FOR(j,i+1,n)
{
x=S-(A[i]+A[j]);
if(x>=0)
sol+=find(x,vC,urmC,nrC,C);
else
continue;
if(x>=A[i])
sol-=find(x-A[i],vB,urmB,nrB,B);
if(x>=A[j])
sol-=find(x-A[j],vB,urmB,nrB,B);
if(x==A[i]+A[j])
sol++;
if(x==A[i]+A[i])
sol++;
if(x==A[j]+A[j])
sol++;
}
printf("%lld\n",sol/6);
fprintf(fo,"%lld\n",sol/6);
fclose(fo);
return 0;
}