#include <iostream>
#include <algorithm>
#define int unsigned long long
using namespace std;
int n , m , v[105] , a[1000005] , b[1000005] , n2 , cura , curb , n1;
void dfsa(int x , int sum)
{
if(x == n1 + 1)
{
if(sum <= m)
a[++cura] = sum;
return;
}
dfsa(x + 1 , sum);
dfsa(x + 1 , sum + v[x]);
}
void dfsb(int x , int sum)
{
if(x == n2 + 1)
{
if(sum <= m)
b[++curb] = sum;
return;
}
dfsb(x + 1 , sum);
dfsb(x + 1 , sum + v[x + n1]);
}
signed main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> v[i];
n1 = n / 2;
dfsa(1 , 0);
n2 = n - n1;
dfsb(1 , 0);
sort(a + 1 , a + cura + 1);
int cnt = 0;
for(int i = 1; i <= curb; i++)
cnt += upper_bound(a + 1 , a + cura + 1 , m - b[i]) - a - 1;
cout << cnt;
return 0;
}