#include <bits/stdc++.h>
using namespace std;
int N, K;
int vals[112];
long long dp[112][112345];
long long prefix[112][112345];
long long add(long long a, long long b) { return (a + b) % 1000000007; }
long long sub(long long a, long long b) { return (a - b) % 1000000007; }
long long get_prefix(int row, int L, int R) {
  long long result = prefix[row][R];
  if (L - 1 >= 0) return sub(result, prefix[row][L - 1]);
  return result;
}
int main() {
  scanf("%d%d", &N, &K);
  for (int i = 0; i < N; i++) {
    scanf("%d", &vals[i]);
  }
  memset(dp, 0, sizeof(dp));
  dp[N][0] = 1;
  for (int i = 0; i <= K; i++) {
    prefix[N][i] = 1;
  }
  for (int i = N - 1; i >= 0; i--) {
    for (int j = 0; j <= K; j++) {
      if (j == 0) {
        dp[i][j] = 1;
        prefix[i][j] = 1;
      } else {
        int c = min(j, vals[i]);
        dp[i][j] = add(dp[i][j], get_prefix(i + 1, j - c, j));
        prefix[i][j] = add(prefix[i][j - 1], dp[i][j]);
      }
    }
  }
  printf("%lld\n", dp[0][K]);
  return 0;
}
