#include <bits/stdc++.h>
using namespace std;
long long n,m;
long long w[500];
long long cnt=0;
long long p[40000000];
long long k;
long long ans;
void dfs(long long u,long long s){
if(u==k){
p[++cnt]=s;
return;
}
dfs(u+1,s);
if(w[u]+s<=m){
dfs(u+1,s+w[u]);
}
}
void dfs2(long long u,long long s){
if(u==n){
int l=0,r=cnt;
int t=m-s;
while(l<r){
int mid=l+r+1>>1;
if(p[mid]>t){
r=mid-1;
}
else l=mid;
}
ans+=r;
return;
}
dfs2(u+1,s);
if(w[u]+s<=m){
dfs2(u+1,w[u]+s);
}
}
signed main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>w[i];
}
if(k>=4)
k=n/2+1;
else k=n/2;
dfs(0,0);
sort(p+1,p+1+cnt);
dfs2(k,0);
cout<<ans<<endl;
return 0;
}
正常的折半搜索,调了1个多小时了