#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100;
const long long int md = 1e9 + 7;
long long int n, s, f[MAXN], ans = 0;
long long int pw(long long int a, long long int b) {
  if (b == (long long int)0) return (long long int)1;
  long long int k = pw(a, b / 2);
  k *= k;
  k %= md;
  if (b % 2) k *= a;
  k %= md;
  return k;
}
long long int inv(long long int a, long long int b) {
  b = pw(b, md - 2);
  a *= b;
  a %= md;
  return a;
}
long long int ch(long long int m, long long int k) {
  if (k == 0) return (long long int)1;
  long long int a = 1, b = 1;
  for (long long int i = 2; i <= k; i++) {
    b *= (i % md);
    b %= md;
  }
  for (long long int i = 0; i < k; i++) {
    a *= ((m - i) % md);
    a %= md;
  }
  return inv(a, b);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> s;
  for (int i = 0; i < n; i++) cin >> f[i];
  ans = ch(s + n - 1, n - 1);
  for (int mask = 1; mask < (1 << n); mask++) {
    long long int sum = 0, tmp;
    for (int i = 0; i < n; i++)
      if ((mask >> i) & 1) sum += f[i] + 1;
    if (sum > s) continue;
    tmp = ch(s - sum + n - 1, n - 1);
    if (__builtin_popcount(mask) % 2 == 0) {
      ans += tmp;
      ans %= md;
    } else {
      ans -= tmp;
      ans += md;
      ans %= md;
    }
  }
  cout << ans << endl;
  return 0;
}
