#include <bits/stdc++.h>
using namespace std;
long long Set(long long n, long long pos) { return n | (1LL << pos); }
bool Check(long long n, long long pos) { return (bool)(n & (1LL << pos)); }
long long a[110];
long long dp[110][100010];
long long csum[110][100010];
int main() {
  long long cs, ts, i, j, k, x, y, z, q, m, n, cap;
  while (scanf("%lld", &n) != EOF) {
    scanf("%lld", &m);
    for (i = 1; i <= n; i++) {
      scanf("%lld", &a[i]);
    }
    dp[0][0] = 1;
    csum[0][0] = 1;
    for (i = 0; i <= n; i++) {
      for (k = 0; k <= m; k++) {
        if (i == 0 && k == 0) continue;
        if (i) {
          dp[i][k] = csum[i - 1][k];
          long long lo = k - a[i];
          lo = max(lo, 0LL);
          if (lo) {
            dp[i][k] -= csum[i - 1][lo - 1];
          }
        }
        csum[i][k] = dp[i][k];
        if (k) csum[i][k] = (csum[i][k] + csum[i][k - 1]) % 1000000007;
      }
    }
    printf("%lld\n", dp[n][m]);
  }
  return 0;
}
