#include <bits/stdc++.h>
const int mod = 1e9 + 7;
int n;
long long S, f[22], inv[22];
void gcd(long long a, long long b, long long& d, long long& x, long long& y) {
  if (!b) {
    d = a;
    x = 1;
    y = 0;
  } else {
    gcd(b, a % b, d, y, x);
    y -= x * (a / b);
  }
}
long long getInv(long long a, long long n) {
  long long d, x, y;
  gcd(a, n, d, x, y);
  return d == 1 ? (x + n) % n : -1;
}
long long C(long long n, long long m) {
  if (n < m) return 0;
  long long res;
  res = 1;
  for (long long i = n; i >= (n - m + 1); --i) {
    res = res * (i % mod) % mod;
    res = res * inv[n - i + 1] % mod;
  }
  return res % mod;
}
int main() {
  for (int i = 1; i <= 20; i++) inv[i] = getInv(i, mod);
  scanf("%d%lld", &n, &S);
  for (int i = 0; i < n; i++) scanf("%lld", &f[i]);
  long long res = 0;
  for (int i = 0; i < (1 << n); i++) {
    int op = 1;
    long long sum = S;
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) {
        sum -= f[j] + 1;
        op = -op;
      }
    }
    if (sum < 0) continue;
    res += op * C(sum + n - 1, n - 1);
    res %= mod;
  }
  if (res < 0) res += mod;
  printf("%lld", res);
}
