#include <bits/stdc++.h>
#pragma GCC optimize(4)
const int MAXN = 10000000 + 10;
const int MAXK = 20 + 10;
const int P = 1000000007;
int Pow(int n, int k) {
  int ans = 1;
  for (; k; k >>= 1) {
    if (k & 1) ans = ans * 1LL * n % P;
    n = n * 1LL * n % P;
  }
  return ans;
}
int inv[MAXK];
int C(long long n, int m) {
  if (n < 0 || n < m || m < 0) return 0;
  n %= P;
  int ans = 1;
  for (register long long i = n - m + 1; i <= n; ++i)
    ans = ans * 1LL * (i + P) % P;
  for (register int i = 1; i <= m; ++i) ans = ans * 1LL * inv[i] % P;
  return ans;
}
int k;
long long n;
long long a[MAXK];
int main() {
  std::cin >> k >> n;
  for (register int i = 1; i <= k; ++i) {
    std::cin >> a[i];
    inv[i] = Pow(i, P - 2);
  }
  int ans = C(n + k - 1, k - 1);
  for (register int s = 1; s < 1 << k; ++s) {
    int cnt = 0;
    long long chose = n;
    for (register int i = 1; i <= k; ++i)
      if (s >> (i - 1) & 1) {
        cnt++;
        chose -= a[i] + 1;
      }
    if (cnt & 1)
      ans = (ans - C(chose + k - 1, k - 1) + P) % P;
    else
      ans = (ans + C(chose + k - 1, k - 1)) % P;
  }
  std::cout << ans << std::endl;
  return 0;
}
