#include <bits/stdc++.h>
const long long P_mod = 1e9 + 7;
using namespace std;
long long n, s;
long long a[30], _pow[30];
inline long long quick_pow(long long x, long long y) {
  long long ans = 1;
  while (y) {
    if (y & 1) ans = (ans * x) % P_mod;
    x = (x * x) % P_mod;
    y >>= 1;
  }
  return ans;
}
inline long long zuhe(long long x, long long y) {
  if (x < 0 || x < 0 || x < y) return 0;
  if (x % P_mod == 0 || y == 0) return 1;
  long long ans = 1;
  for (register long long i = x - y + 1; i <= x; ++i)
    ans = ans * (i % P_mod) % P_mod;
  for (register long long i = 1; i <= y; ++i) ans = ans * _pow[i] % P_mod;
  return ans;
}
signed main() {
  scanf("%lld%lld", &n, &s);
  for (register long long i = 1; i <= n; ++i) {
    scanf("%lld", &a[i - 1]);
  }
  for (register long long i = 1; i <= 20; ++i)
    _pow[i] = quick_pow((long long)i, (long long)P_mod - 2);
  long long res = zuhe(n + s - 1, n - 1) % P_mod;
  for (register long long i = 1; i <= (1 << n) - 1; ++i) {
    long long k = n + s, p = 0;
    for (register long long j = 0; j < n; ++j)
      if ((1 << j) & i) ++p, k -= a[j];
    k -= p + 1;
    if (p & 1)
      res -= zuhe(k, n - 1), res %= P_mod;
    else
      res += zuhe(k, n - 1), res %= P_mod;
  }
  res = (res + P_mod) % P_mod;
  printf("%lld\n", res);
  return 0;
}
