#include <bits/stdc++.h>
using namespace std;
int pow2(long long t, long long n) {
  if (n == 1) return t % 1000000007;
  if (n % 2 == 0)
    return pow2((t * t) % 1000000007, n / 2);
  else
    return (t * pow2(t, n - 1)) % 1000000007;
}
int mod_inv(int r) { return pow2(r, 1000000007 - 2); }
int inv[20];
void init() {
  for (int i = 0; i < 20; i++) inv[i] = mod_inv(i);
}
int C(long long n, long long r) {
  if (r == 0) return 1;
  if (n == 0) return 0;
  return (long long)C(n - 1, r - 1) * (n % 1000000007) % 1000000007 * inv[r] %
         1000000007;
}
long long ans = 0;
int n;
void rec(long long* v, int d, long long s, bool sign) {
  if (s < 0) return;
  if (d == 0) {
    ans += sign ? C(n + s - 1, n - 1) : -C(n + s - 1, n - 1);
    ans %= 1000000007;
    return;
  }
  rec(v + 1, d - 1, s, sign);
  rec(v + 1, d - 1, s - *v - 1, !sign);
}
int fun(const void* a, const void* b) {
  return *(long long*)a > *(long long*)b;
}
bool fun2(const long long& a, const long long& b) { return a > b; }
int main() {
  init();
  long long s;
  cin >> n >> s;
  long long v[n];
  long long sum = 0;
  for (int i = 0; i < n; i++) {
    cin >> v[i];
    sum += v[i];
  }
  if (sum < s) {
    cout << 0 << endl;
    return 0;
  }
  if (sum < 2 * s) {
    s = sum - s;
  }
  sort(v, v + n, fun2);
  rec(v, n, s, 1);
  cout << (ans >= 0 ? ans : 1000000007 + ans) << endl;
  return 0;
}
