#include <bits/stdc++.h>
using namespace std;
const long long maxn = 25, mod = 1000000007;
long long n;
long long s;
long long f[maxn];
long long num[(1 << 20) + 5], sum[(1 << 20) + 5];
long long read() {
  long long x = 0, y = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') y = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();
  return x * y;
}
long long power(long long x, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * x % mod;
    x = x * x % mod;
    b >>= 1;
  }
  return ans;
}
long long C(long long n, long long m) {
  if (n < m) return 0;
  long long pai1 = 1, pai2 = 1;
  for (long long i = n - m + 1; i <= n; i++) pai1 = pai1 * (i % mod) % mod;
  for (long long i = 1; i <= m; i++) pai2 = pai2 * i % mod;
  return pai1 * power(pai2, mod - 2) % mod;
}
signed main() {
  n = read();
  s = read();
  for (long long i = 0; i < n; i++) f[i] = read();
  long long ans = 0, mx = 1, c = 0;
  for (long long i = 0; i < (1 << n); i++) {
    if (i == 2 * mx) mx = 2 * mx, c++;
    if (i) {
      num[i] = num[i - mx] + 1;
      sum[i] = sum[i - mx] + f[c] + 1;
    }
    long long op = (num[i] & 1) ? -1 : 1;
    ans = ((ans + op * C(s + n - 1 - sum[i], n - 1) % mod) % mod + mod) % mod;
  }
  printf("%lld\n", ans);
  return 0;
}
