#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
typedef long long ll;
inline int read()
{
int x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch >'9')
{
if(ch == '-')
{
f = -1;
}
ch = getchar();
}
while(ch >= '0' && ch <= '9')
{
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
inline ll lread()
{
ll x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch >'9')
{
if(ch == '-')
{
f = -1;
}
ch = getchar();
}
while(ch >= '0' && ch <= '9')
{
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
ll a[25];
int inv[25];
int n;
ll m, ans = 0;
int qpow(int a, int b)
{
int ans = 1;
ll base = (ll)a % mod;
while(b)
{
if (b & 1)
{
ans = (ll)ans * base % mod;
}
base = (ll)base * base % mod;
b >>= 1;
}
return ans;
}
int C(ll y, int x)
{
if (y < 0 || x < 0 || y < x)
{
return 0;
}
y %= mod;
if (y == 0 || x == 0)
{
return 1;
}
int ans = 1;
for (int i = 0; i < x; i++)
{
ans = (ll)ans * (y - i) % mod;
}
for (int i = 1; i <= x; i++)
{
ans = (ll)ans * inv[i] % mod;
}
return ans;
}
int main()
{
for (int i = 1; i <= 20; i++)
{
inv[i] = qpow(i, mod - 2);
}
n = read();
m = lread();
for (int i = 1; i <= n; i++)
{
a[i] = lread();
}
for (int x = 0; x < 1<<n; x++)
{
if (x == 0)
{
ans = (ans + C(n + m - 1, n - 1)) % mod;
}
else
{
ll t = n + m;
int p = 0;
for (int i = 0; i < n; i++)
{
if (x >> i & 1)
{
p++;
t -= a[i + 1];
}
}
t -= p + 1;
if (p & 1)
{
ans = (ans - C(t, n - 1)) % mod;
}
else
{
ans = (ans - C(t, n - 1)) % mod;
}
}
}
cout << (ans + mod) % mod << endl;
return 0;
}