#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long f = 1, sum = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum * f;
}
const int MAXN = 25;
const int Mod = 1e9 + 7;
long long a[MAXN];
int quickpow(long long a, long long b) {
  int tmp = 1;
  while (b) {
    if (b & 1) tmp = (long long)(tmp * a) % Mod;
    b /= 2;
    a = (long long)(a * a) % Mod;
  }
  return tmp;
}
long long C(int n, int m) {
  if (n > m) return 0;
  if (n > m - n) n = m - n;
  long long a = 1, b = 1;
  for (int i = 1; i <= n; i++) a = a * i % Mod, b = b * (m - i + 1) % Mod;
  return b * quickpow(a, Mod - 2) % Mod;
}
int lucas(long long n, long long m) {
  if (!n) return 1;
  return ((long long)C(n % Mod, m % Mod) * lucas(n / Mod, m / Mod)) % Mod;
}
int main() {
  int n;
  long long s;
  scanf("%d%I64d", &n, &s);
  for (int i = 1; i <= n; i++) scanf("%I64d", &a[i]);
  long long ans = 0;
  for (int i = 0; i < (1 << n); i++) {
    long long sig = 1, sum = s;
    for (int j = 1; j <= n; j++)
      if (i & (1 << (j - 1))) sum -= a[j] + 1, sig = -sig;
    if (sum >= 0)
      ans = (ans + (lucas(n - 1, sum + n - 1) * sig) % Mod + Mod) % Mod;
  }
  cout << ans;
  return 0;
}
