const maxx=4000;
minn=-4000;
var n,i,j,k:longint;
d:array[1..40,minn..maxx] of longint;
a:array[1..40] of longint;
f:text;
//
procedure input;
begin
assign(f,'EXP.INP');
reset(f);
readln(f,n,k);
for i:=1 to n do read(f,a[i]);
close(f);
end;
//
procedure optimize;
begin
d[1,a[1]]:=1;
for i:=1 to n-1 do
for j:=minn+a[i+1] to maxx-a[i+1] do
begin
inc(d[i+1,j-a[i+1]],d[i,j]);
inc(d[i+1,j+a[i+1]],d[i,j]);
end;
end;
//
procedure output;
begin
assign(f,'EXP.OUT');
rewrite(f);
write(f,d[n,k]);
close(f);
end;
//
begin
input;
optimize;
output;
end.