#define rep(i,n) for(int i=0;i<(int)(n);i++) #define ALL(v) v.begin(),v.end() typedef long long ll; #include using namespace std; const ll INF=1e18; const int MOD=998244353; ll dp[100100]; const int MAX=210000; ll fac[MAX],finv[MAX],inv[MAX]; void init(){ fac[0]=fac[1]=1; finv[0]=finv[1]=1; inv[1]=1; for(int i=2;i>n>>m; vector A(n); rep(i,n) cin>>A[i]; rep(i,100100) dp[i]=INF; dp[0]=0; for(int i=1;i<=m;i++){ rep(j,n){ if(i-A[j]>=0) dp[i]=min(dp[i],dp[i-A[j]]+1); } } ll ans=0; for(int i=0;i<=m;i++){ if(dp[i]==INF) continue; ans=(ans+nCr(m-dp[i],i-dp[i]))%MOD; } cout<