#include <bits/stdc++.h>
using namespace std;
const long long MX = 2e5 + 5;
long long s[MX];
long long a[MX];
long long f[MX];
long long n, m;
const long long D = 1e9 + 7;
long long p;
long long q;
long long pow2(long long x, long long y) {
  if (y == 0) return 1;
  long long ret = pow2(x, y / 2);
  ret *= ret;
  ret %= D;
  if (y % 2) ret *= x;
  return ret % D;
}
long long c(long long x, long long y) {
  return f[x] * pow2(f[y], D - 2) % D * pow2(f[x - y], D - 2) % D;
}
int main() {
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  q = pow2(2, n + 1);
  long long i, j;
  f[0] = 1;
  for (i = 1; i <= n; i++) {
    f[i] = f[i - 1] * i % D;
    cin >> a[i];
    s[i] = s[i - 1] + a[i];
  }
  s[n + 1] = m * 2;
  long long w = 0;
  for (i = 1; i <= n; i++) {
    for (j = max(w, m - s[i + 1] + 1); j <= min(m - s[i], i); j++) {
      p = (p + c(i, j) * i % D * pow2(2, n - i) % D) % D;
    }
    for (j = max(w, m - s[i + 1]); j <= min(m - s[i], i); j++)
      p = (p + c(i, j) * i % D * pow2(2, n - i) % D) % D;
  }
  cout << p * pow2(q, D - 2) % D;
  return 0;
}
