#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long f[21];
long long bitmask;
long long nc2mod(long long n) {
  long long retval = 0;
  n += 2;
  retval = (((n % mod) * ((n - 1) % mod)) / 2) % mod;
  return retval;
}
long long modPow(long long a, long long x, long long p) {
  long long res = 1;
  while (x > 0) {
    if (x % 2 != 0) {
      res = (res * a) % p;
    }
    a = (a * a) % p;
    x /= 2;
  }
  return res;
}
long long modInverse(long long a, long long p) { return modPow(a, p - 2, p); }
long long modBinomial(long long n, long long k, long long p) {
  long long numerator = 1;
  for (long long i = 0; i < k; i++) {
    numerator = (numerator * ((n - i) % p)) % p;
  }
  long long denominator = 1;
  for (long long i = 1; i <= k; i++) {
    denominator = (denominator * i) % p;
  }
  return (numerator * modInverse(denominator, p)) % p;
}
int main() {
  long long i, s, t, n, x, sum = 0, k, maxt = 0, j, ans = 0, success = 1,
                           current, sign = 0;
  cin >> n >> s;
  for (i = 0; i < n; i++) {
    cin >> f[i];
  }
  bitmask = (1 << n) - 1;
  ans += modBinomial(s + n - 1, n - 1, mod);
  for (i = 1; i <= bitmask; i++) {
    current = s;
    success = 1;
    sign = 0;
    for (j = 0; j < n; j++) {
      if ((1 << j) & i) {
        sign = sign == 0 ? 1 : 0;
        current -= (f[j] + 1);
        if (current < 0) {
          success = 0;
          break;
        }
      }
    }
    if (success == 1) {
      if (sign == 1)
        ans = (ans - modBinomial(current + n - 1, n - 1, mod)) % mod;
      else
        ans = (ans + modBinomial(current + n - 1, n - 1, mod)) % mod;
      ans = (ans + mod) % mod;
    }
  }
  cout << (ans) % mod;
  return 0;
}
