#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7;
void swap(long long int &a, long long int &b) {
  long long int t = a;
  a = b;
  b = t;
}
long long int min(long long int a, long long int b) {
  if (a < b) return a;
  return b;
}
long long int max(long long int a, long long int b) {
  if (a > b) return a;
  return b;
}
long long int pow(long long int a, long long int b) {
  a %= mod;
  long long int ans = 1;
  while (b > 0) {
    if (b & 1) ans = ans * a % mod;
    a = a * a % mod;
    b /= 2;
  }
  return ans;
}
const int MAX = 1e5 + 3;
long long int dp[102][MAX];
long long int prefix[102][MAX];
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  long long int n, k;
  cin >> n >> k;
  long long int a[n];
  for (long long int i = 0; i < n; i++) {
    cin >> a[i];
  }
  memset(dp, 0, sizeof(dp));
  dp[0][0] = 1;
  memset(prefix, 0, sizeof(prefix));
  prefix[0][0] = 1;
  for (int i = 1; i <= k; i++) {
    prefix[0][i] = (prefix[0][i - 1] % mod + dp[0][i] % mod) % mod;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= k; j++) {
      int l = j;
      int r = j - min(a[i - 1], j);
      swap(l, r);
      long long int t = prefix[i - 1][r];
      if (l != 0) {
        t -= prefix[i - 1][l - 1];
      }
      dp[i][j] = t;
    }
    prefix[i][0] = dp[i][0];
    for (int m = 1; m <= k; m++) {
      prefix[i][m] = (prefix[i][m - 1] % mod + dp[i][m] % mod) % mod;
    }
  }
  cout << dp[n][k];
}
