#include <bits/stdc++.h>
using namespace std;
void open() { freopen("data.txt", "r", stdin); }
void out() { freopen("out.txt", "w", stdout); }
const int maxn = 1e5 + 5;
const long long MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
long long powmod(long long a, long long b, long long c) {
  long long res = 1;
  a %= c;
  while (b) {
    if (b & 1) res = (res * a) % c;
    a = a * a % c;
    b >>= 1;
  }
  return res;
}
long long C(long long n, long long k) {
  if (n < k) {
    return 0;
  }
  if (k > n - k) {
    k = n - k;
  }
  long long a = 1, b = 1;
  for (int i = 0; i < k; i++) {
    a = a * (n - i) % MOD;
    b = b * (i + 1) % MOD;
  }
  return a * powmod(b, MOD - 2, MOD) % MOD;
}
long long lucas(long long n, long long m) {
  if (m == 0) return 1;
  return C(n % MOD, m % MOD) * lucas(n / MOD, m / MOD) % MOD;
}
long long ans, arr[25], s;
int n;
int main() {
  cin >> n >> s;
  for (int i = 0; i < (n); ++i) cin >> arr[i];
  for (int i = 0; i < (1 << n); ++i) {
    long long sum = s;
    int cnt = 0;
    for (int j = 0; j < (n); ++j) {
      if (i & (1 << j)) {
        cnt++;
        sum -= arr[j] + 1;
      }
    }
    if (sum < 0) continue;
    if (cnt & 1)
      ans = (ans - lucas(sum + n - 1, n - 1)) % MOD;
    else
      ans = (ans + lucas(sum + n - 1, n - 1)) % MOD;
  }
  cout << (ans + MOD) % MOD << endl;
}
