#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
const int N = 45;
int n, w, v[N];
int sl[N], sr[N];
int ans, l, r, d;
void left(int i, int sum) {
if (i == d + 1) {
sl[++l] = sum;
return;
}
if (sum + v[i] <= w)
left(i + 1, sum + v[i]);
left(i + 1, sum);
}
void right(int i, int sum) {
if (i == n + 1) {
sr[++r] = sum;
return;
}
if (sum + v[i] <= w)
right(i + 1, sum + v[i]);
right(i + 1, sum);
}
#define all_sl sl + 1, sl + l + 1
signed main() {
cin >> n >> w;
for (int i = 1; i <= n; ++i)
cin >> v[i];
d = n / 2;
left(1, 0);
right(n - d, 0);
sort(all_sl);
sort(sr + 1, sr + r + 1);
for (int i = 1; i <= r; ++i) {
int k = upper_bound(all_sl, w - sr[i]) - sl;
ans += k - 1;
}
cout << ans;
return 0;
}