#include <bits/stdc++.h>
const int MAXN = 25;
const int ARSIZE = 100005;
const int LIM = 100000;
const int MOD = 1000000007;
int N;
long long S, f[MAXN], fac[ARSIZE], inv[ARSIZE];
long long pow(long long bs, int ex) {
  long long res = 1;
  for (; ex; ex >>= 1, bs = bs * bs % MOD)
    if (ex & 1) res = res * bs % MOD;
  return res;
}
void init();
long long C(long long n, long long r);
int main() {
  init();
  scanf("%d%lld", &N, &S);
  int i;
  long long sum = 0;
  for (i = 0; i < N; i++) {
    scanf("%lld", &f[i]);
    sum += f[i];
  }
  long long res = C(N + S - 1, N - 1);
  for (int mask = (1 << N) - 1; mask > 0; --mask) {
    int size = 0;
    long long rem = S;
    for (i = 0; i < N; i++)
      if (mask >> i & 1) ++size, rem -= f[i] + 1;
    if (rem < 0) continue;
    if (size & 1)
      res = (res + MOD - C(rem + N - 1, N - 1)) % MOD;
    else
      res = (res + C(rem + N - 1, N - 1)) % MOD;
  }
  printf("%lld\n", res);
}
void init() {
  int i;
  for (fac[0] = i = 1; i <= LIM; i++) fac[i] = i * fac[i - 1] % MOD;
  inv[LIM] = pow(fac[LIM], MOD - 2);
  for (i = LIM - 1; i >= 0; i--) inv[i] = (i + 1) * inv[i + 1] % MOD;
}
long long C(long long n, long long r) {
  if (r > n) return 0;
  if (!r) return 1;
  if (n <= LIM) return fac[n] * inv[r] % MOD * inv[n - r] % MOD;
  r = std::min(r, n - r);
  if (n >= MOD) return C(n / MOD, r / MOD) * C(n % MOD, r % MOD) % MOD;
  long long prd = 1, dvr = 1;
  for (long long i = 0; i < r; i++)
    prd = prd * (n - i) % MOD, dvr = dvr * (i + 1) % MOD;
  return prd * pow(dvr, MOD - 2) % MOD;
}
