#include <bits/stdc++.h>
using namespace std;
long long fac[2000005];
void pre() {
  fac[0] = 1;
  fac[1] = 1;
  for (int i = 2; i < 200005; i++) fac[i] = (i * fac[i - 1]) % 998244353;
}
long long power(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1) res = (res * a) % 998244353;
    a = (a * a) % 998244353;
    b = b / 2;
  }
  return res % 998244353;
}
long long ncr(long long n, long long r) {
  return ((fac[n] * power(fac[r], 998244353 - 2)) % 998244353 *
          power(fac[n - r], 998244353 - 2)) %
         998244353;
}
long long n, s;
long long a[3005];
bool dp[3005][3005];
vector<vector<int>> v;
long long ans = 0;
void pr(int i, int sum, vector<int>& p) {
  if (i == 0 && sum != 0 && dp[0][sum]) {
    p.push_back(i);
    sort(p.begin(), p.end());
    long long can1 = p[0] + 1;
    long long can2 = n - p.back();
    can1 %= 998244353;
    can2 %= 998244353;
    ans += (can1 * can2) % 998244353;
    return;
  }
  if (i == 0 && sum == 0) {
    sort(p.begin(), p.end());
    long long can1 = p[0] + 1;
    long long can2 = n - p.back();
    can1 %= 998244353;
    can2 %= 998244353;
    ans += (can1 * can2) % 998244353;
    return;
  }
  if (dp[i - 1][sum]) {
    vector<int> b = p;
    pr(i - 1, sum, b);
  }
  if (s >= a[i] && dp[i - 1][sum - a[i]]) {
    p.push_back(i);
    pr(i - 1, sum - a[i], p);
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t;
  t = 1;
  while (t--) {
    cin >> n >> s;
    for (int i = 0; i < n; i++) {
      cin >> a[i];
    }
    for (int i = 0; i < n; i++) {
      dp[i][0] = true;
    }
    if (a[0] <= s) dp[0][a[0]] = true;
    for (int i = 1; i < n; ++i)
      for (int j = 0; j < s + 1; ++j)
        dp[i][j] =
            (a[i] <= j) ? dp[i - 1][j] || dp[i - 1][j - a[i]] : dp[i - 1][j];
    if (!dp[n - 1][s]) {
      cout << "0" << endl;
    } else {
      vector<int> v1;
      pr(n - 1, s, v1);
      cout << ans % 998244353 << endl;
    }
  }
}
