#include <bits/stdc++.h>
const int MXN = 1e6 + 200;
const long long MNN = 2e3 + 520;
const long long MOD = 1e9 + 7;
const long long INF = 1e18;
const int OO = 1e9 + 500;
using namespace std;
long long n, k, b[MXN], dp[MXN];
void add(long long& a, long long b) {
  a += b;
  if (a < 0) a += MOD;
  while (a >= MOD) a -= MOD;
}
int main() {
  ios_base::sync_with_stdio(0), cout.tie(0), cin.tie(0);
  ;
  cin >> n >> k;
  dp[0] = 1;
  for (int i = 1; i <= n; i++) {
    cin >> b[i];
    long long d[MXN];
    for (int j = k; j >= 0; j--) {
      if (j + 1 < j + min(b[i], k - j) + 1) {
        d[j + 1] = dp[j];
        if (j + min(b[i], k - j) + 1 <= k) {
          dp[j + min(b[i], k - j) + 1] = -dp[j];
        }
      }
    }
    long long sum = 0;
    for (int j = 0; j <= k; j++) {
      add(sum, d[j]);
      add(dp[j], sum);
    }
  }
  cout << dp[k];
}
