func_code_string: #include <bits/stdc++.h>   using namespace std;   long long sum = 0, n, m;   const long long mod = 1e9 + 7;   long long f[25];   long long qpow(long long a, long long b) {     long long ans = 1;     while (b) {       if (b & 1) ans = (ans * a) % mod;       a = (a * a) % mod;       b >>= 1;     }     return ans;   }   long long getc(long long a, long long b) {     if (a < b) return 0;     if (b > a - b) b = a - b;     long long s1 = 1, s2 = 1;     for (long long i = 0; i < b; i++) {       s1 = s1 * (a - i) % mod;       s2 = s2 * (i + 1) % mod;     }     return s1 * qpow(s2, mod - 2) % mod;   }   long long lucas(long long n, long long k) {     if (k == 0) return 1;     return getc(n % mod, k % mod) * lucas(n / mod, k / mod) % mod;   }   long long solve() {     long long ans = 0;     for (int i = 0; i < (1 << n); i++) {       long long cnt = 0, sum = m;       for (int j = 0; j < n; j++) {         if (i & (1 << j)) {           sum -= f[j] + 1;           cnt++;         }       }       if (sum < 0) continue;       if (cnt & 1)         ans -= lucas(sum + n - 1, n - 1);       else         ans += lucas(sum + n - 1, n - 1);       ans %= mod;     }     return (ans + mod) % mod;   }   int main() {     scanf( %lld%lld , &n, &m);     for (int i = 0; i < n; i++) scanf( %lld , &f[i]);     printf( %lld n , solve());     return 0;   }   