#include <bits/stdc++.h>
using namespace std;
const long long M = 1e9 + 7;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
long long n, k;
long long a[101];
long long dp[101][100005];
long long ft[100000 + 5];
void upd(long long i0, long long v) {
  for (long long i = i0 + 1; i <= 100002; i += i & -i) ft[i] = (ft[i] + v) % M;
}
long long get(long long i0) {
  long long r = 0;
  for (long long i = i0; i; i -= i & -i) r = (r + ft[i]) % M;
  return r;
}
long long get_sum(long long i0, long long i1) {
  return (get(i1) + M - get(i0)) % M;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  for (int i = 0; i < min(a[n - 1], k) + 1; i++) {
    upd(i, 1);
  }
  for (long long i = n - 2; i >= 0; i--) {
    for (int j = 0; j < k + 1; j++) {
      dp[i][j] = get_sum(max(j - a[i], 0ll), j + 1);
    }
    memset(ft, 0, sizeof(ft));
    for (int j = 0; j < k + 1; j++) {
      upd(j, dp[i][j]);
    }
  }
  cout << dp[0][k];
}
