#include<bits/stdc++.h>
#define INF 9223372036854775807LL
#define mod 998244353
#define SYOU(x) setprecision(x+1)
#define abs(x,y) (max(x,y)-min(x,y))
#define lol long long
#define mp make_pair
#define fi first
#define se second
using namespace std;
lol rui[5000][5000]={};
signed main(){
  cin.tie(0);
  ios::sync_with_stdio(false);
  lol n,m,s;
  int a[5000];
  set<int> se[5000];
  cin >>n>>s;
  for(int i=0;i<n;i++){
    cin >>a[i];
  }
  for(int i=0;i<n;i++){
    if(a[i]==s) rui[i+1][i+1]++;
    else{
      se[i].insert(a[i]);
      for(int j=0;j<i;j++){
        for(auto it=se[j].begin();it!=se[j].end();it++){
          if(a[i]+(*it)==s) rui[j+1][i+1]++;
          else{
            if(a[i]+(*it)<s){
              se[j].insert(a[i]+(*it));
            }
          }
        }
      }
    }
  }
      
  lol ans=0;
  for(int i=1;i<=n;i++){
    for(int j=1;j<=n;j++){
      rui[i][j]+=rui[i][j-1];
    }
  }
  for(int j=1;j<=n;j++){
    for(int i=1;i<=n;i++){
      rui[i][j]+=rui[i-1][j];
    }
  }
  for(int i=1;i<=n;i++){
    for(int j=i;j<=n;j++){
      ans-=rui[i-1][j]+rui[j][i-1];
      ans+=rui[j][j]+rui[i-1][i-1];
      ans%=mod;
    }
  }
  cout <<ans<<'\n';
  /*for(int i=0;i<=n;i++){
    for(int j=0;j<=n;j++){
      cout <<' '<<rui[i][j];
    }
    cout <<'\n';
    }*/
  return (0);
}
