#include <bits/stdc++.h>
using namespace std;
long long f[100];
int 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);
  }
  return 0;
}
long long inv(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 qpow(long long x, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) res = (res * x) % 1000000007;
    n >>= 1;
    x = (x * x) % 1000000007;
  }
  return res;
}
long long solve(long long s, long long n) {
  if (s < n) return 0;
  long long p = 1, q = 1;
  for (int i = 1; i <= n; i++) {
    p *= (long long)(s - i + 1) % 1000000007;
    p %= 1000000007;
    q *= (long long)i;
    q %= 1000000007;
  }
  q = inv(q, 1000000007);
  return p * q % 1000000007;
}
long long lucas(long long a, long long b) {
  if (a < b) return 0;
  if (b == 0) return 1;
  return solve(a % 1000000007, b % 1000000007) *
         lucas(a / 1000000007, b / 1000000007) % 1000000007;
}
int main() {
  int n;
  long long s;
  scanf("%d%I64d", &n, &s);
  for (int i = (1); i <= (n); i++) scanf("%I64d", &f[i]);
  long long ans = solve(s + n - 1, n - 1);
  for (int i = 1; i < (1 << n); i++) {
    long long t = 0;
    int cnt = 0;
    for (int j = 1; j <= n; j++)
      if (i & (1 << (j - 1))) t += f[j] + 1, cnt++;
    long long res = lucas(s - t + n - 1, (long long)n - 1);
    if (cnt & 1)
      ans = (ans - res + 1000000007) % 1000000007;
    else
      ans = (ans + res) % 1000000007;
  }
  printf("%I64d\n", ans);
}
