#include <bits/stdc++.h>
using namespace std;
const long long int mod = (long long int)(1e9 + 7);
long long int inv[55];
map<long long int, long long int> mp_coeff;
void gen(long long int id, vector<long long int> f, long long int power,
         long long int cur_coeff) {
  if (id == f.size()) {
    mp_coeff[power] += cur_coeff;
    mp_coeff[power] %= mod;
  } else {
    gen(id + 1, f, power, cur_coeff);
    long long int new_cur_coeff = cur_coeff * -1;
    new_cur_coeff %= mod;
    if (new_cur_coeff < 0) new_cur_coeff += mod;
    gen(id + 1, f, power + f[id] + 1, new_cur_coeff);
  }
}
long long int combination(long long int n, long long int r) {
  if (r > n) return 0;
  if (n - r < r) r = n - r;
  n %= mod;
  long long int ans = 1;
  for (int i = 0; i < r; i++) {
    ans = (ans * (n - i)) % mod;
    ans = (ans * inv[i + 1]) % mod;
  }
  return ans;
}
long long int solve(long long int n, long long int s, vector<long long int> f) {
  mp_coeff.clear();
  gen(0, f, 0, 1);
  long long int ans = 0;
  map<long long int, long long int>::iterator it;
  for (it = mp_coeff.begin(); it != mp_coeff.end(); it++) {
    long long int power = it->first;
    long long int coeff = it->second;
    long long int rem = (s - power);
    if (rem >= 0) {
      ans += combination(n + rem - 1, rem) * coeff;
      ans %= mod;
    }
  }
  return ans;
}
long long int modpow(long long int a, long long int b, long long int mod) {
  long long int res = 1;
  while (b) {
    if (b & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return res;
}
int main() {
  long long int n, s, t;
  for (int i = 1; i <= 50; i++) inv[i] = modpow(i, mod - 2, mod);
  cin >> n >> s;
  vector<long long int> f;
  for (int i = 0; i < n; i++) {
    cin >> t;
    f.push_back(t);
  }
  cout << solve(n, s, f) << endl;
  return 0;
}
