#include using namespace std; #define int long long #define endl "\n" const int N = 20, mod = 1e9 + 7; int A[N]; int n, m; // 快速幂 int qmi(int a, int k) { int res = 1; while (k) { if (k & 1) res = res * a % mod; a = a * a % mod; k >>= 1; } return res; } int C(int a, int b) { if (a < b) return 0; int up = 1, down = 1; for (int i = a; i > a - b; i--) up = i % mod * up % mod; for (int i = 1; i <= n - 1; i++) down = i * down % mod; //(n-1)! % mod down = qmi(down, mod - 2); // 费马小定理求逆元 return up * down % mod; // 费马小定理 } signed main() { cin >> n >> m; for (int i = 0; i < n; i++) cin >> A[i]; int res = C(n + m - 1, n - 1); for (int i = 1; i < (1 << n); i++) { int sum = 0, cnt = 0; for (int j = 0; j < n; j++) { if (i >> j & 1) { sum += A[j] + 1; cnt++; } } if (cnt & 1) res = (res - C(m + n - 1 - sum, n - 1) + mod) % mod; else res = (res + C(m + n - 1 - sum, n - 1)) % mod; } cout << res << endl; }