from collections import * from itertools import * from functools import * from heapq import * import sys,math input = sys.stdin.readline N,M = map(int,input().split()) A = list(map(int,input().split())) INF = (1<<60) dp = [INF]*(M+1) dp[0] = 0 mod = 998244353 class combination(): def __init__(self,N,p): self.fact = [1, 1] # fact[n] = (n! mod p) self.factinv = [1, 1] # factinv[n] = ((n!)^(-1) mod p) self.inv = [0, 1] # factinv 計算用 self.p = p for i in range(2, N + 1): self.fact.append((self.fact[-1] * i) % p) self.inv.append((-self.inv[p % i] * (p // i)) % p) self.factinv.append((self.factinv[-1] * self.inv[-1]) % p) def cmb(self,n, r): if (r < 0) or (n < r): return 0 r = min(r, n - r) return self.fact[n] * self.factinv[r] * self.factinv[n-r] % self.p for a in A: for j in range(M-a+1): dp[j+a] = min(dp[j+a],dp[j]+1) ans = 0 C = combination(M+1,mod) for i in range(M+1): if dp[i]==INF: continue j = dp[i] ans += C.cmb(M-j,i-j) ans %= mod print(ans)