#include #define pb emplace_back #define fst first #define scd second #define mkp make_pair #define mems(a, x) memset((a), (x), sizeof(a)) using namespace std; using ll = long long; using ull = unsigned long long; using db = double; using ldb = long double; using pii = pair; using pll = pair; const int maxn = 110; const int mod = 1234567891; ll n, m, a[55], f[25050], g[50050]; void solve() { scanf("%lld%lld", &n, &m); ll s = 0; for (int i = 1; i <= n; ++i) { scanf("%lld", &a[i]); s += a[i]; } f[0] = 1; for (int _ = 0; _ < 60; ++_, m >>= 1) { mems(g, 0); for (int i = 0; i <= s; ++i) { g[i] = f[i]; } for (int i = 1; i <= n; ++i) { for (int j = s * 2; j >= a[i]; --j) { g[j] = (g[j] + g[j - a[i]]) % mod; } } mems(f, 0); for (int i = 0; i <= s * 2; ++i) { if ((i & 1) == (m & 1)) { f[i >> 1] = (f[i >> 1] + g[i]) % mod; } } } printf("%lld\n", f[0]); } int main() { int T = 1; // scanf("%d", &T); while (T--) { solve(); } return 0; }