#include <bits/stdc++.h>
using namespace std;
long long ar[22], inv[22];
long long solve(long long n, long long r) {
  if (r > n) return 0;
  n %= 1000000007;
  long long ret = 1ll;
  for (int i = 0; i < r; i++) {
    ret *= (n - i);
    ret %= 1000000007;
  }
  ret *= inv[r];
  ret %= 1000000007;
  return ret;
}
long long bigmod(long long b, long long p) {
  if (p == 0ll) return 1ll;
  if (p & 1ll) return (b * bigmod(b, p - 1) % 1000000007) % 1000000007;
  long long x = bigmod(b, p / 2ll) % 1000000007;
  return (x * x) % 1000000007;
}
int main() {
  long long f = 1ll;
  inv[0] = 1ll;
  for (int i = 1; i <= 20; i++) {
    f *= (long long)i;
    f %= 1000000007;
    inv[i] = bigmod(f, 1000000007 - 2) % 1000000007;
  }
  int n;
  long long s;
  cin >> n >> s;
  for (int i = 0; i < n; i++) cin >> ar[i];
  int lm = (1 << n);
  long long res = 0ll;
  for (int i = 0; i < lm; i++) {
    long long now = s;
    int cnt = 0;
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) {
        cnt++;
        now -= ar[j] + 1;
      }
    }
    if (now < 0) continue;
    long long get = solve(now + n - 1, n - 1);
    if (cnt & 1) get *= -1ll;
    res = (res + get) % 1000000007;
    if (res < 0) res += 1000000007;
  }
  cout << res << endl;
  return 0;
}
