#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
int n, m, t, k;
int c[((int)2e5 + 5)];
map<int, int> dp[105];
int pre[105][((int)2e5 + 5)];
void add(int& a, int b) {
  a += b;
  if (a > ((int)1e9 + 7)) a -= ((int)1e9 + 7);
  if (a < 0) a += ((int)1e9 + 7);
}
int pref(int i, int l, int r) {
  if (l > 0) return (pre[i][r] - pre[i][l - 1]) % ((int)1e9 + 7);
  return (pre[i][r]) % ((int)1e9 + 7);
}
void calcpre(int x) {
  pre[x][0] = 1;
  for (int i = 1; i <= k; ++i)
    pre[x][i] = (pre[x][i - 1] + dp[x][i]) % ((int)1e9 + 7);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n; ++i) cin >> c[i];
  for (int i = 0; i <= c[0]; ++i) dp[0][i] = 1;
  calcpre(0);
  for (int i = 1; i < n; ++i) {
    for (int j = 0; j <= k; ++j) add(dp[i][j], pref(i - 1, j - c[i], j));
    calcpre(i);
  }
  cout << dp[n - 1][k] << "\n";
  return 0;
}
