#include<bits/stdc++.h> usingnamespace std; typedeflonglong ll; const ll maxn = 5e7 + 50; ll n, m, alen, blen, a[maxn], b[maxn], in[100];
voiddfs1(ll idx, ll sum){ if (idx > n / 2) { a[++alen] = sum; return; } for (ll i = 0; i < 2; ++i) { if (sum + i * in[idx] > m) break; dfs1(idx + 1, sum + i * in[idx]); } }
voiddfs2(ll idx, ll sum){ if (idx > n) { b[++blen] = sum; return; } for (ll i = 0; i < 2; ++i) { if (sum + i * in[idx] > m) break; dfs2(idx + 1, sum + i * in[idx]); } }
intmain(){ cin >> n >> m; for (ll i = 1; i <= n; ++i) cin >> in[i]; dfs1(1, 0), dfs2(n / 2 + 1, 0); sort(a + 1, a + 1 + alen), sort(b + 1, b + 1 + blen); ll cnt = 0; for (ll i = 1, j = blen; i <= alen; ++i) { while (j >= 1 && a[i] > m - b[j]) --j; cnt += j; } cout << cnt << endl; return0; }