#include <bits/stdc++.h>
using namespace std;
long long invmod(long long x) {
  long long n = 1000000007LL - 2;
  long long ans = 1LL;
  while (n) {
    if (n % 2) ans = ((ans % 1000000007LL) * (x % 1000000007LL)) % 1000000007LL;
    n /= 2;
    x = ((x % 1000000007LL) * (x % 1000000007LL)) % 1000000007LL;
  }
  return ans % 1000000007LL;
}
long long ncr(long long n, long long r) {
  if (n < r) return 0LL;
  long long ans = 1LL;
  long long niche = 1LL, i;
  for (i = 1; i <= r; i++) niche *= i;
  niche = invmod(niche) % 1000000007LL;
  for (i = 1; i <= r; i++)
    ans = ((ans % 1000000007LL) * ((n - r + i) % 1000000007LL)) % 1000000007LL;
  ans = ((ans % 1000000007LL) * (niche % 1000000007LL)) % 1000000007LL;
  return ans;
}
int main() {
  long long i, j, k, l, n, ans = 0LL, f, s, p, coeff;
  cin >> n >> s;
  map<long long, long long> mp;
  map<long long, long long>::iterator it;
  mp[0] = 1;
  for (i = 1; i <= n; i++) {
    cin >> f;
    map<long long, long long> mp2;
    for (it = mp.begin(); it != mp.end(); it++) {
      p = it->first;
      coeff = it->second;
      p += (f + 1);
      mp2[p] = -coeff;
    }
    for (it = mp2.begin(); it != mp2.end(); it++) {
      mp[it->first] += (it->second);
    }
  }
  long long diff, now, mul;
  for (it = mp.begin(); it != mp.end(); it++) {
    if (it->first > s) break;
    diff = s - it->first;
    now = ncr(diff + n - 1, n - 1);
    mul = ((it->second % 1000000007LL) * (now % 1000000007LL)) % 1000000007LL;
    ans = (((ans + 1000000007LL) % 1000000007LL) + (mul % 1000000007LL)) %
          1000000007LL;
  }
  cout << (ans + 1000000007LL) % 1000000007LL << endl;
}
