func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MAXN = 2e5 + 10;   long long n, T, fac[MAXN], a[MAXN], inv[MAXN], b[MAXN], ans, mod = 1e9 + 7;   long long read() {     long long sss = 0, fff = 1;     char ccc;     ccc = getchar();     while (ccc <  0  || ccc >  9 ) {       if (ccc ==  - ) fff = -1;       ccc = getchar();     }     while (ccc >=  0  && ccc <=  9 )       sss = (sss << 1) + (sss << 3) + (ccc ^  0 ), ccc = getchar();     return sss * fff;   }   long long ksm(long long base, long long k) {     long long sum = 1;     while (k) {       if (k & 1) sum = sum * base % mod;       base = base * base % mod;       k >>= 1;     }     return sum;   }   long long C(long long n, long long m) {     if (n < m) return 0;     return fac[n] * inv[n - m] % mod * inv[m] % mod;   }   int main() {     n = read();     T = read();     for (long long i = 1; i <= n; i++) a[i] = read();     b[n] = ksm(2, n);     b[n] = ksm(b[n], mod - 2);     for (long long i = n - 1; i >= 0; i--) b[i] = b[i + 1] * 2 % mod;     fac[0] = 1;     for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % mod;     inv[n] = ksm(fac[n], mod - 2);     for (int i = n - 1; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % mod;     long long now = 0;     bool flag = true;     long long TT, sum = 0, CCC;     while (now <= n && T >= a[now + 1]) {       now++, T -= a[now];       if (now <= T)         ans = (ans + 1) % mod;       else {         if (flag) {           TT = T;           CCC = now;           for (long long i = 0; i <= TT; i++) sum = (sum + C(now, i)) % mod;         } else           sum = (sum * 2 % mod - C(now - 1, TT) + mod) % mod;         flag = false;         while (TT > T) {           sum = (sum - C(now, TT) + mod) % mod;           TT--;         }         ans = (ans + sum * b[now] % mod) % mod;       }     }     printf( %lld n , ans);     return 0;   }   