#include <bits/stdc++.h>
int main() {
  int n, k;
  long long mod = 1000000007;
  std::vector<int> aList;
  std::vector<std::vector<long long>> dpList;
  std::cin >> n >> k;
  aList.resize(n);
  dpList.resize(n + 1);
  for (int i = 0; i < n + 1; i++) dpList[i].resize(k + 1, 0);
  for (int i = 0; i < n; i++) std::cin >> aList[i];
  dpList[0][0] = 1;
  int curMax = 0;
  for (int i = 0; i < n; i++) {
    std::vector<long long> cumSum(curMax + 1, 0);
    cumSum[0] = dpList[i][0];
    for (int j = 1; j <= curMax; j++)
      cumSum[j] = (cumSum[j - 1] + dpList[i][j]) % mod;
    for (int j = 0; j <= k; j++) {
      int maxIdx = std::min(j, curMax);
      int minIdx = std::max(-1, j - aList[i] - 1);
      dpList[i + 1][j] = cumSum[maxIdx];
      if (minIdx >= 0) dpList[i + 1][j] = dpList[i + 1][j] - cumSum[minIdx];
      if (dpList[i + 1][j] < 0) dpList[i + 1][j] += mod;
    }
    curMax = std::min(curMax + aList[i], k);
  }
  std::cout << dpList[n][k] << std::endl;
  return 0;
}
