#include <bits/stdc++.h>
using namespace std;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
const int mod = (int)1e9 + 7;
long long gcd(long long a, long long b) { return (b == 0 ? a : gcd(b, a % b)); }
long long egcd(long long a, long long b, long long& x, long long& y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  long long x1, y1;
  long long d = egcd(b % a, a, x1, y1);
  x = y1 - (b / a) * x1;
  y = x1;
  return d;
}
long long mbinp(long long a, long long b) {
  a %= mod;
  if (b == 0) return 1;
  long long ans = mbinp(a, b / 2);
  long long tmp = (ans * ans) % mod;
  if (b % 2) return ((tmp * a) % mod);
  return ((tmp) % mod);
}
long long binp(long long a, long long b) {
  if (b == 0) return 1;
  long long ans = binp(a, b / 2);
  long long tmp = (ans * ans);
  if (b % 2) return ((tmp * a));
  return ((tmp));
}
const int maax = 100 * 1000 + 250;
long long dp[maax];
long long tab[110];
int n;
int k;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> k;
  long long sum = 0;
  for (int i = 0; i < n; i++) {
    cin >> tab[i];
    sum += tab[i];
  }
  if (sum < k) {
    cout << 0;
    return 0;
  }
  dp[0] = dp[1] = 1;
  for (int i = 2; i < maax; i++) {
    dp[i] = dp[i - 1] * i;
    dp[i] %= mod;
  }
  long long ans = 0;
  ans += ((dp[k + n - 1] * mbinp(dp[n - 1], mod - 2)) % mod *
          mbinp(dp[k], mod - 2)) %
         mod;
  ans %= mod;
  for (int i = 0; i < n; i++) {
    ans -= ((dp[k + n - 1 - tab[i] - 1] * mbinp(dp[k - tab[i] - 1], mod - 2)) %
            mod * mbinp(dp[n - 1], mod - 2)) %
           mod;
    ans = (ans + mod) % mod;
  }
  cout << ans % mod;
}
