#include <bits/stdc++.h>
using namespace std;
long long int mi(long long int n, long long int m) {
  long long int pw = n % m;
  long long int ex = m - 2;
  long long int ans = 1;
  while (ex) {
    if (ex & 1) ans = ans * pw % m;
    pw = pw * pw % m;
    ex >>= 1;
  }
  return ans % 1000000007;
}
long long int pw(long long int a, long long int n) {
  long long int pw = a % 1000000007;
  long long int ex = n;
  long long int ans = 1;
  while (ex) {
    if (ex & 1) ans = ans * pw % 1000000007;
    pw = pw * pw % 1000000007;
    ex >>= 1;
  }
  return ans % 1000000007;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (T &t : v) is >> t;
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  for (const T &t : v) {
    os << t << " ";
  }
  os << '\n';
  return os;
}
void show(long long int x) { cout << x << " "; }
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return a / gcd(a, b) * b;
}
long long int max(long long int a, long long int b) { return a > b ? a : b; }
long long int min(long long int a, long long int b) { return a < b ? a : b; }
long long int Abs(long long int x) { return x > 0 ? x : (-x); }
long long int Ceil(long long int a, long long int b) {
  return a / b + (a % b != 0);
}
void solve() {
  long long int n, k;
  cin >> n >> k;
  vector<long long int> a(n);
  cin >> a;
  vector<long long int> dp(k + 1);
  for (int i = 0; i <= a[0]; i++) dp[i] = 1;
  for (int i = 1; i < n; i++) {
    vector<long long int> tmp = dp;
    vector<long long int> pre(k + 1);
    pre[0] = dp[0];
    for (int j = 1; j <= k; j++) pre[j] = (pre[j - 1] + dp[j]) % 1000000007;
    for (int l = 1; l <= k; l++) {
      if (a[i] >= l)
        tmp[l] = (tmp[l] + pre[l - 1]) % 1000000007;
      else
        tmp[l] = (tmp[l] + pre[l - 1] - pre[l - a[i] - 1]);
    }
    dp = tmp;
  }
  cout << dp[k];
}
int32_t main() {
  int t = 1;
  while (t--) {
    solve();
  }
}
