#include <bits/stdc++.h>
using namespace std;
const long long p = 1000000007;
const int MAXN = 30;
long long a[MAXN], inv[MAXN];
long long fastpow(long long base, long long exp) {
  long long cur, a;
  cur = 1LL;
  a = base;
  while (exp != 0LL) {
    if ((exp & 1LL) == 1LL) cur = cur * a % p;
    a = a * a % p;
    exp = exp >> 1LL;
  }
  return cur % p;
}
long long fermat(long long a) { return fastpow(a, p - 2); }
long long combination(long long a, long long b) {
  if (a < 0LL || b < 0LL || a < b) return 0LL;
  a %= p;
  if (b == 0 || a == 0) return 1LL;
  long long ans = 1LL;
  for (long long i = (0LL); i <= (b - 1LL); i += (1)) ans = ans * (a - i) % p;
  for (long long i = (1LL); i <= (b); i += (1)) ans = ans * inv[i] % p;
  return ans;
}
int main(int argc, char *argv[]) {
  ios::sync_with_stdio(false);
  for (long long i = (1); i <= (22); i += (1)) inv[i] = fermat(i);
  long long n, m;
  cin >> n >> m;
  for (long long i = (0LL); i <= (n - 1LL); i += (1)) cin >> a[i];
  long long res = (((combination(n + m - 1LL, n - 1LL)) % (p) + (p)) % (p));
  for (long long i = (1LL); i <= ((1LL << n) - 1LL); i += (1)) {
    long long cur = n + m - 1, state = 1LL;
    for (long long j = (0LL); j <= (n - 1LL); j += (1))
      if (i & (1LL << j)) {
        state = -state;
        cur -= a[j] + 1;
      }
    res = (((res + state * combination(cur, n - 1)) % (p) + (p)) % (p));
  }
  cout << res << endl;
  return 0;
}
