#include <bits/stdc++.h>
long long a[25], inv[25];
long long qpow(long long a, long long b) {
  long long ret = 1;
  for (; b; b >>= 1) {
    if (b & 1) ret = (ret * a) % 1000000007;
    a = (a * a) % 1000000007;
  }
  return ret;
}
long long C(long long n, int m) {
  if (n < m) return 0;
  if (n == m) return 1;
  if (m == 0) return 1;
  long long ret = n % 1000000007;
  for (int i = 1; i < m; ++i) {
    ret = (ret * ((n - i) % 1000000007)) % 1000000007;
    ret = (ret * inv[i + 1]) % 1000000007;
  }
  return ret;
}
int main() {
  int n;
  long long s, ans = 0;
  scanf("%d %lld", &n, &s);
  for (int i = 0; i < n; ++i) {
    scanf("%lld", &a[i]);
    inv[i + 1] = qpow(i + 1, 1000000007 - 2);
  }
  for (int i = 0; i < (1 << n); ++i) {
    int sgn = 1;
    long long tmp = s;
    for (int j = 0; (1 << j) <= i; ++j) {
      if ((1 << j) & i) {
        sgn = -sgn;
        tmp -= a[j] + 1;
      }
    }
    ans = (ans + C(tmp + n - 1, n - 1) * sgn) % 1000000007;
  }
  if (ans < 0) ans += 1000000007;
  printf("%lld\n", ans);
  return 0;
}
