func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MAXN = 2e5 + 10, MOD = 1e9 + 7;   long long n, T, ni[MAXN], jie[MAXN], jie_ni[MAXN], A[MAXN], ans, sum;   long long sum_N, sum_K;   void Init() {     ni[1] = 1;     for (long long i = 2; i <= MAXN - 10; i++) {       ni[i] = ((MOD - (MOD / i)) * ni[MOD % i] % MOD) % MOD;     }     jie_ni[0] = 1;     for (long long i = 1; i <= MAXN - 10; i++) {       jie_ni[i] = jie_ni[i - 1] * ni[i] % MOD;     }     jie[0] = 1;     for (long long i = 1; i <= MAXN - 10; i++) {       jie[i] = jie[i - 1] * i % MOD;     }   }   long long Quick(long long x, long long y) {     long long res = 1, a = x;     while (y) {       if (y & 1) res *= a, res %= MOD;       a = a * a, a %= MOD;       y /= 2;     }     return res;   }   long long C(long long x, long long y) {     if (y == 0) return 1;     if (x == y) return 1;     return (jie[x] * jie_ni[y]) % MOD * jie_ni[x - y] % MOD;   }   long long work(long long N, long long K) {     if (sum_N == 0) {       sum_N = 1;       for (long long i = 1; i <= K; i++) sum_N += C(N, i), sum_N %= MOD;       sum_K = K;       return sum_N;     } else {       sum_N = (sum_N * 2 - C(N - 1, sum_K) + MOD) % MOD;       for (long long i = sum_K; i >= K + 1; i--) {         sum_N -= C(N, i), sum_N = (sum_N + MOD) % MOD;       }       sum_K = K;       return sum_N;     }   }   signed main() {     cin >> n >> T;     Init();     for (long long i = 1; i <= n; i++) cin >> A[i];     long long BASE = 1;     for (long long i = 1; i <= n; i++) {       sum += A[i];       BASE = BASE * 2;       BASE %= MOD;       if (T - sum >= i) {         ans++;         ans %= MOD;       } else if (T - sum < 0) {         break;       } else {         ans += (work(i, T - sum) * Quick(BASE, MOD - 2)) % MOD;         ans %= MOD;       }     }     cout << ans;     return 0;   }   