#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  for (ll i = 0; i < v.size(); ++i) os << v[i] << " ";
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& v) {
  for (auto it : v) os << it << " ";
  return os;
}
template <typename T, typename S>
ostream& operator<<(ostream& os, const pair<T, S>& v) {
  os << v.first << " " << v.second;
  return os;
}
const ll mod = 1e9 + 7;
const ll inf = 2e18;
const ll ninf = -2e18;
ll takemod(ll a) { return ((a % mod) + mod) % mod; }
ll pow(ll a, ll b, ll m) {
  ll ans = 1;
  a %= m;
  while (b) {
    if (b & 1) ans = (ans * a) % m;
    b /= 2;
    a = (a * a) % m;
  }
  return ans;
}
ll modinv(ll a) { return takemod(pow(takemod(a), mod - 2, mod)); }
const ll MX = 3005;
ll dp[MX][MX];
ll pref[MX][MX];
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  time_t t1, t2;
  t1 = clock();
  ll n, s;
  cin >> n >> s;
  vector<ll> arr(n + 1);
  for (ll i = 1; i <= n; i++) cin >> arr[i];
  for (ll i = 1; i <= n; i++) {
    dp[i][arr[i]] = i;
    for (ll j = arr[i]; j <= s; j++) {
      dp[i][j] = (dp[i][j] % mod + pref[i - 1][j - arr[i]] % mod) % mod;
    }
    for (ll j = 1; j <= s; j++) {
      pref[i][j] = (dp[i][j] % mod + pref[i - 1][j] % mod) % mod;
    }
  }
  ll ans = 0;
  for (ll i = 1; i <= n; i++) {
    ans = (ans % mod + ((dp[i][s] % mod) * (n - i + 1) % mod) % mod) % mod;
  }
  cout << ans << '\n';
  t2 = clock();
  cerr << '\n' << t2 - t1 << '\n';
  return 0;
}
