#include <bits/stdc++.h>
using namespace std;
const int Mod = 1000000007;
using ll = long long;
using VI = vector<int>;
using VVI = vector<VI>;
using VL = vector<ll>;
using VLL = vector<VL>;
int N;
ll T;
VL t;
VI p;
VI fact;
void ReadData();
void Solve();
void CalcP();
int Comb(int N, int K);
int Fact(int x);
int InvMod(int x);
int Pow(int a, int p);
int main() {
  ReadData();
  Solve();
  return 0;
}
void ReadData() {
  cin >> N >> T;
  t = VL(N + 1);
  p = VI(N + 1);
  for (int i = 1; i <= N; ++i) cin >> t[i];
}
void Solve() {
  CalcP();
  int ans{0};
  for (int i = 1; i < N; ++i) {
    ans = (ans + p[i]) % Mod;
  }
  ans = (ans + p[N]) % Mod;
  cout << ans << '\n';
}
void CalcP() {
  ll sum{0}, m;
  for (int i = 1; i <= N; ++i) {
    sum += t[i];
    if (sum > T) break;
    if (sum + i <= T) {
      p[i] = Pow(2, i);
      m = i;
      continue;
    }
    if (i == 1) {
      p[i] = (1LL * InvMod(2) * Pow(2, i)) % Mod;
      m = 0;
      continue;
    }
    int prob = p[i - 1];
    while (sum + m > T) {
      prob = (prob - Comb(i - 1, m) + Mod) % Mod;
      --m;
    }
    prob = (2LL * prob) % Mod;
    prob = (prob - Comb(i - 1, 0) + Mod) % Mod;
    prob = (prob - Comb(i - 1, m) + Mod) % Mod;
    prob = (prob + Comb(i, 0)) % Mod;
    p[i] = prob;
  }
  for (int i = 1; i <= N; ++i) {
    p[i] = (1LL * p[i] * InvMod(Pow(2, i))) % Mod;
  }
}
int Comb(int N, int K) {
  if (K == 0 || N == K) return 1;
  int res = (1LL * Fact(N) * InvMod(Fact(N - K))) % Mod;
  res = (1LL * res * InvMod(Fact(K))) % Mod;
  return res;
}
int Fact(int x) {
  if (static_cast<int>(fact.size()) < x + 1) fact.resize(x + 1);
  if (x == 0) return 1;
  if (fact[x]) return fact[x];
  return fact[x] = (1LL * Fact(x - 1) * x) % Mod;
}
int InvMod(int x) { return Pow(x, Mod - 2); }
int Pow(int a, int p) {
  int res{1};
  while (p) {
    if (p & 1) res = (1LL * res * a) % Mod;
    a = (1LL * a * a) % Mod;
    p >>= 1;
  }
  return res;
}
