#include <bits/stdc++.h>
using namespace std;
int n, k;
vector<int> a;
vector<vector<long long>> DP;
const long long inf = 1000000007;
long long add1(long long a, long long b) { return (a + b) % inf; }
long long mult1(long long a, long long b) { return (a * b) % inf; }
int main() {
  cin >> n >> k;
  a.resize(n + 1);
  for (int i = 1; i < n + 1; i++) {
    cin >> a[i];
  }
  DP.resize(k + 1);
  for (int i = 0; i < k + 1; i++) DP[i].resize(n + 1, 0);
  fill(DP[0].begin(), DP[0].end(), 1);
  for (int i = 1; i < k + 1; i++) {
    if (i > a[n])
      DP[i][n] = 0;
    else
      DP[i][n] = 1;
  }
  for (int i = 1; i < k + 1; i++) {
    for (int j = n - 1; j >= 0; j--) {
      for (int k = 0; k < a[j] + 1; k++) {
        if (k > i) break;
        DP[i][j] = add1(DP[i - k][j + 1], DP[i][j]);
      }
    }
  }
  cout << DP[k][1] << endl;
}
