#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
long long n, s;
long long f[25];
long long m2[50];
map<long long, long long> pro;
void makepro(int id, long long pow, long long a) {
  if (id == n) {
    pro[pow] += a;
    pro[pow] %= mod;
  } else {
    makepro(id + 1, pow, a);
    long long t = a * (-1);
    t %= mod;
    if (t < mod) t += mod;
    makepro(id + 1, pow + f[id] + 1, t);
  }
}
long long makebac(long long n, long long m) {
  if (m > n) return 0;
  if (m == 0) return 1;
  if (m == 1) return (n + mod) % mod;
  if (n - m < m) m = n - m;
  n %= mod;
  long long up = 1;
  for (int i = 1; i <= m; ++i) {
    up = (up * (n - i + 1)) % mod;
    up = (up * m2[i]) % mod;
  }
  return up;
}
long long solve() {
  pro.clear();
  makepro(0, 0, 1);
  long long ans = 0;
  for (map<long long, long long>::iterator it = pro.begin(); it != pro.end();
       ++it) {
    long long w = it->first;
    long long e = it->second;
    long long lf = s - w;
    if (lf >= 0) {
      ans += (e * makebac(n + lf - 1, lf)) % mod;
      ans = (ans + mod) % mod;
    }
  }
  return ans;
}
long long qpow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) {
      ans = (ans * a + mod) % mod;
    }
    b >>= 1;
    a = (a * a) % mod;
  }
  return (ans + mod) % mod;
}
void init() {
  m2[0] = 1;
  for (int i = 1; i < 23; ++i) {
    m2[i] = qpow(i, mod - 2);
  }
}
int main() {
  init();
  while (cin >> n >> s) {
    for (int i = 0; i < n; ++i) cin >> f[i];
    long long res = solve();
    cout << res << endl;
  }
  return 0;
}
