#include <bits/stdc++.h>
using namespace std;
class mint {
  static const int MOD = 1e9 + 7;
  int x;

 public:
  mint() : x(0) {}
  mint(long long y) {
    x = y % MOD;
    if (x < 0) x += MOD;
  }
  mint& operator+=(const mint& m) {
    x += m.x;
    if (x >= MOD) x -= MOD;
    return *this;
  }
  mint& operator-=(const mint& m) {
    x -= m.x;
    if (x < 0) x += MOD;
    return *this;
  }
  mint& operator*=(const mint& m) {
    x = 1LL * x * m.x % MOD;
    return *this;
  }
  mint& operator/=(const mint& m) { return *this *= inverse(m); }
  mint operator+(const mint& m) const { return mint(*this) += m; }
  mint operator-(const mint& m) const { return mint(*this) -= m; }
  mint operator*(const mint& m) const { return mint(*this) *= m; }
  mint operator/(const mint& m) const { return mint(*this) /= m; }
  friend mint inverse(const mint& m) {
    int a = m.x, b = MOD, u = 1, v = 0;
    while (b > 0) {
      int t = a / b;
      a -= t * b;
      swap(a, b);
      u -= t * v;
      swap(u, v);
    }
    return u;
  }
  friend istream& operator>>(istream& is, mint& m) {
    long long t;
    is >> t;
    m = mint(t);
    return is;
  }
  friend ostream& operator<<(ostream& os, const mint& m) { return os << m.x; }
  int to_int() const { return x; }
};
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  mint dp[100001] = {1};
  for (int i = 0; i < (n); i++) {
    int a;
    scanf("%d", &a);
    for (int j = k; j >= a + 1; j--) dp[j] -= dp[j - a + 1];
    for (int j = 0; j < (k); j++) dp[j + 1] += dp[j];
  }
  printf("%d\n", dp[k].to_int());
  return 0;
}
