#include<iostream>
#include<algorithm>
using namespace std;
const int N=(1<<20)+1;
long long l[N];
long long r[N];
long long t[50];
long long n,m;
int i=1,j=1;
void dfs(int a,int b,int d,int cnt){
if(cnt>m){
return;
}
if(d==0&&a>b){
l[i++]=cnt;
}
else if(d==1&&a>b){
r[j++]=cnt;
}
else{
dfs(a+1,b,d,cnt+t[a]);
dfs(a+1,b,d,cnt);
}
}
int compute(){
int ans=0;
int a=1,b=j;
while(a<=i&&b>=1){
if(l[a]+r[b]<=m){
ans+=b;
a++;
}
else{
b--;
}
}
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>t[i];
}
dfs(1,n>>1,0,0);
dfs((n>>1)+1,n,1,0);
i--;
j--;
sort(l+1,l+1+i);
sort(r+1,r+1+j);
cout<<compute();
return 0;
}