#include #include #include #include #include using namespace std; long long modinv(long long a, long long m) { long long b = m, u = 1, v = 0; while (b) { long long t = a / b; a -= t * b; swap(a, b); u -= t * v; swap(u, v); } u %= m; if (u < 0) u += m; return u; } int main() { int n, m; cin >> n >> m; long long mod = 998244353; vector a(n); vector frag(m+1,0); for(int i = 0; i < n; i++) { cin >> a[i]; frag[a[i]] = 1; } for(int i = 0; i < n; i++) { for(int j = 1; j <= m; j++) { if(frag[j] == 0) continue; if(j + a[i] > m) break; if(frag[j+a[i]] == 0) frag[j+a[i]] = frag[j] + 1; if(frag[j+a[i]] > frag[j] + 1) frag[j+a[i]] = frag[j] + 1; } } long long ans = 0; for(int j = 1; j <= m; j++) { // cout << j << ':'; if(frag[j] == 0) { // cout << 0 << endl; continue; } long long value = 1, x = m - frag[j], r = j - frag[j], i = 1; if(r == 0) ans = (ans + 1) % mod; else { while(i <= r) { value = value * (x - i + 1); value %= mod; value = value * modinv(i, mod) % mod; i++; } ans = (ans + value) % mod; } // cout << value << endl; } cout << ans + 1 << endl; return 0; }