#include <bits/stdc++.h>
using namespace std;
const int MAXN = 22;
const long long MOD = 1e9 + 7;
long long getmod(long long x) {
  if (x < 0) {
    x %= MOD;
    return (x + MOD) % MOD;
  }
  return x % MOD;
}
void mult(long long& x, long long y) {
  x = (x * (y % MOD)) % MOD;
  assert(x >= 0);
}
int N;
long long S, arr[MAXN];
long long inv[MAXN];
long long choose(long long n, long long r) {
  long long res = 1;
  for (long long i = 0; i < r; i++) {
    mult(res, n - i);
    mult(res, inv[i + 1]);
  }
  return res;
}
long long get(long long n, long long s) {
  if (s < 0) {
    return 0;
  }
  if (n == N) {
    return choose(s + n - 1, n - 1);
  }
  return getmod(get(n + 1, s) - get(n + 1, s - arr[n]));
}
int main() {
  cin >> N >> S;
  for (int i = 0; i < N; i++) {
    cin >> arr[i];
    arr[i]++;
  }
  for (int i = 1; i < MAXN; i++) {
    long long& ref = inv[i];
    ref = 1;
    for (long long j = MOD - 2, curpow = i; j; j >>= 1) {
      if (j & 1) {
        mult(ref, curpow);
      }
      mult(curpow, curpow);
    }
  }
  cout << get(0, S) << endl;
}
