#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int add(int x, int y) { return x + y < mod ? x + y : x + y - mod; }
int qpow(int x, int k) {
  int r = 1;
  while (k) {
    if (k & 1) r = 1ll * r * x % mod;
    k >>= 1;
    x = 1ll * x * x % mod;
  }
  return r;
}
int inv[22];
int n;
long long m;
long long ma[22];
int c1[2000200];
int p1(int x) { return x % 2 ? mod - 1 : 1; }
int C(long long x, int y) {
  if (x < y || x < 0 || y < 0) return 0;
  int res = 1;
  for (int i = 1; i <= y; ++i) {
    res = 1ll * res * ((x - i + 1) % mod) % mod;
    res = 1ll * res * inv[i] % mod;
  }
  return res;
}
int calc(int s) {
  long long t = m;
  for (int i = 0; i < n; ++i)
    if ((s >> i) & 1) t -= ma[i + 1] + 1;
  if (t < 0) return 0;
  int res = C(t + n - 1, n - 1);
  return res;
}
int main() {
  scanf("%d%lld", &n, &m);
  long long sum = 0;
  for (int i = 1; i <= n; ++i) {
    scanf("%lld", &ma[i]), inv[i] = qpow(i, mod - 2);
    sum += ma[i];
  }
  if (sum < m) {
    puts("0");
    return 0;
  }
  int u = 1 << n;
  u--;
  int ans = 0;
  for (int i = 0; i < u; ++i) {
    c1[i] = c1[i >> 1] + (i & 1);
    ans = add(ans, 1ll * p1(c1[i]) * calc(i) % mod);
  }
  printf("%d\n", ans);
  return 0;
}
