#include <bits/stdc++.h>
using namespace std;
const long long N = 20 + 10, M = 1000 + 10;
long long a[N], fact[M];
long long bin_pow(long long x, long long y) {
  if (y == 0) return 1;
  return bin_pow(x * x % (1000 * 1000 * 1000 + 7), y / 2) * (y % 2 ? x : 1) %
         (1000 * 1000 * 1000 + 7);
}
long long inv(long long x) { return bin_pow(x, (1000 * 1000 * 1000 + 7) - 2); }
long long ch(long long x, long long y) {
  if (x > y) return 0LL;
  long long m = 1;
  for (long long i = (y - x + 1); i <= (y); i++) {
    m *= i % (1000 * 1000 * 1000 + 7);
    m %= (1000 * 1000 * 1000 + 7);
  }
  return inv(fact[x]) * m % (1000 * 1000 * 1000 + 7);
}
int main() {
  ios_base::sync_with_stdio(false);
  fact[0] = 1;
  for (long long i = (1); i <= (M - 5); i++)
    fact[i] = fact[i - 1] * i % (1000 * 1000 * 1000 + 7);
  long long n, s, ans = 0;
  cin >> n >> s;
  for (long long i = (0); i <= (n - 1); i++) cin >> a[i];
  for (long long mask = (0); mask <= ((1 << n) - 1); mask++) {
    long long x = s, b = mask, t = 0;
    for (long long i = (0); i <= (n - 1); i++) {
      if (b % 2) x -= a[i], t++;
      b /= 2;
    }
    if (t % 2 == 0) {
      ans += ch(n - 1, x + n - t - 1);
      ans %= (1000 * 1000 * 1000 + 7);
    } else {
      ans -= ch(n - 1, x + n - t - 1);
      ans += (1000 * 1000 * 1000 + 7);
      ans %= (1000 * 1000 * 1000 + 7);
    }
  }
  cout << ans << '\n';
  return 0;
}
