#include <bits/stdc++.h>
using namespace std;
int rem = 1000000007;
vector<long long> v;
vector<long long> d(21);
vector<long long> down(21);
long long n, s;
long long binpow(long long a, long long n) {
  if (n == 0) return 1;
  long long tmp = binpow(a, n / 2);
  if (n & 1) return tmp * tmp % rem * a % rem;
  return tmp * tmp % rem;
}
long long one = 1;
long long getc(long long m, long long n) {
  if (n < m) return 0;
  long long ans = 1;
  for (int i = 1; i <= m; ++i)
    ans = (n - i + 1) % rem * ans % rem * down[i] % rem;
  return ans;
}
void fn(long long indx, long long numnumbers, long long sum) {
  if (sum > s) return;
  if (indx == n) {
    sum = s - sum;
    d[numnumbers] += getc(n - one, sum + n - one);
    return;
  }
  fn(indx + one, numnumbers, sum);
  fn(indx + one, numnumbers + one, sum + v[indx] + one);
}
int main() {
  cin >> n >> s;
  for (int i = 1; i <= 20; i++) {
    down[i] = binpow(i, rem - 2);
  }
  v.resize(n);
  for (int i = 0; i < n; i++) {
    scanf("%I64d", &v[i]);
  }
  long long rest = getc(n - one, n + s - one);
  fn(0, 0, 0);
  for (int i = 1; i <= n; i++) {
    if (i & 1)
      rest -= d[i];
    else
      rest += d[i];
    rest += rem;
    rest %= rem;
  }
  cout << rest;
  return 0;
}
