#include #include using namespace std; const long long md = 998244353; int a[109], d[100009], inf = 1000000000; long long ft[100009], rt[100009]; long long fp(long long n, long long k) { long long s = 1; while (k) { if (k & 1) s = (s * n) % md; n = (n * n) % md; k /= 2; } return s; } long long cb(int n, int k) { return (((ft[n] * rt[k]) % md) * rt[n - k]) % md; } int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) cin >> a[i]; ft[0] = rt[0] = 1; for (int i = 1; i <= m; i++) ft[i] = (ft[i - 1] * i) % md; rt[m] = fp(ft[m], md - 2); for (int i = m - 1; i >= 1; i--) rt[i] = (rt[i + 1] * (i + 1)) % md; d[0] = 0; long long ans = 1; for (int i = 1; i <= m; i++) { d[i] = inf; for (int j = 1; j <= n; j++) if (a[j] <= i) d[i] = min(d[i], d[i - a[j]] + 1); if (d[i] != inf) ans = (ans + cb(m - d[i], i - d[i])) % md; } cout << ans << '\n'; return 0; }