#include <bits/stdc++.h>
const int MOD = 1e9 + 7;
int n, ans;
long long m, a[21];
inline long long min(long long a, long long b) { return a < b ? a : b; }
void exgcd(int a, int b, int &x, int &y) {
  if (!b) {
    x = 1;
    y = 0;
    return;
  }
  exgcd(b, a % b, y, x);
  y -= a / b * x;
}
inline int inv(int a) {
  int x, y;
  exgcd(a, MOD, x, y);
  return (x % MOD + MOD) % MOD;
}
int binom(long long n, long long m) {
  if (n < m) return 0;
  if (n < MOD && m < MOD) {
    m = min(m, n - m);
    int a = 1, b = 1;
    for (int i = 1; i <= m; i++)
      a = (long long)a * i % MOD, b = (long long)b * (n - i + 1) % MOD;
    return (long long)inv(a) * b % MOD;
  }
  return (long long)binom(n / MOD, m / MOD) * binom(n % MOD, m % MOD) % MOD;
}
inline int pwr_1(int k) { return (k & 1) ? -1 : 1; }
int main() {
  scanf("%d%lld", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
  for (int s = 0; s < (1 << n); s++) {
    long long k = n + m - 1;
    int pc = 0;
    for (int i = 1; i <= n; i++)
      if (s & (1 << i - 1)) k -= a[i] + 1, pc++;
    ans = ((ans + pwr_1(pc) * binom(k, n - 1)) % MOD + MOD) % MOD;
  }
  printf("%d\n", ans);
  return 0;
}
