#include using namespace std; #define rep(i, a) for (int i = 0; i < (a); i++) #define rep2(i, a, b) for (int i = (a); i < (b); i++) #define repr(i, a) for (int i = (a) - 1; i >= 0; i--) #define repr2(i, a, b) for (int i = (b) - 1; i >= (a); i--) template bool chmin(T1 &a, T2 b) { return b < a && (a = b, true); } template bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); } typedef long long ll; int main() { ll n, m; cin >> n >> m; vector a(n); rep(i, n) cin >> a[i]; const ll mod = 1234567891; static ll dp0[50505], dp1[50505]; dp0[0] = 1; while (m > 0) { memset(dp1, 0, sizeof(dp1)); rep(i, n) repr(j, 50505) if (j + a[i] < 50505) { (dp0[j + a[i]] += dp0[j]) %= mod; } rep(j, 50505) if (j % 2 == (m & 1)) { (dp1[j / 2] += dp0[j]) %= mod; } m /= 2; swap(dp0, dp1); } cout << dp0[0] << endl; return 0; }