#include <bits/stdc++.h>
using namespace std;
long long flo[22], inv[22];
int n;
long long s;
long long ksm(long long x, long long t) {
  long long ans = 1;
  while (t) {
    if (t & 1) ans = ans * x % 1000000007;
    x = x * x % 1000000007;
    t >>= 1;
  }
  return ans;
}
void input() {
  scanf("%d%lld", &n, &s);
  for (int i = 1; i <= n; i++) scanf("%lld", &flo[i]);
  for (int i = 1; i <= n; i++) inv[i] = ksm(i, 1000000007 - 2);
}
long long C(long long n, long long m) {
  long long ans = 1;
  for (long long i = n; i > n - m; i--)
    ans = ans * (i % 1000000007) % 1000000007;
  for (long long i = 1; i <= m; i++) ans = ans * inv[i] % 1000000007;
  return ans;
}
long long ans = 0;
void dfs(int p, long long mi, long long sig) {
  if (mi > s) return;
  if (p == n + 1)
    ans = (ans + sig * C(s - mi + n - 1, n - 1) + 1000000007 * 2) % 1000000007;
  else {
    dfs(p + 1, mi, sig);
    dfs(p + 1, mi + flo[p] + 1, -sig);
  }
}
int main() {
  input();
  dfs(1, 0, 1);
  cout << ans << endl;
  return 0;
}
