#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target( \
    "avx,avx2,fma,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
long long MOD = 1e9 + 7;
long long modd = MOD;
vector<vector<long long> > mult(vector<vector<long long> > a1,
                                vector<vector<long long> > a2) {
  long long nn = a1.size();
  vector<vector<long long> > aa(nn);
  for (int i = 0; i < nn; i++) {
    aa[i].resize(nn);
    for (int j = 0; j < nn; j++) {
      long long anss = 0;
      for (int k = 0; k < nn; k++) {
        anss += (a1[i][k] * a2[k][j]) % modd;
        anss %= modd;
      }
      aa[i][j] = anss;
    }
  }
  return aa;
}
vector<vector<long long> > e;
void init_mat(long long n) {
  e.resize(n);
  for (int i = 0; i < n; i++) {
    e[i].resize(n, 0);
    e[i][i] = 1;
  }
}
vector<vector<long long> > binpow(vector<vector<long long> > a, long long n) {
  if (n == 0) return e;
  if (n % 2 == 1)
    return mult(binpow(a, n - 1), a);
  else {
    vector<vector<long long> > b = binpow(a, n / 2);
    return mult(b, b);
  }
}
long long dp[256];
long long dp2[256];
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0),
      cout << fixed << setprecision(20);
  long long w[7];
  for (int i = 0; i < 7; i++) {
    cin >> w[i];
  }
  long long cur = 2;
  dp[1] = 1;
  long long curl = 128;
  for (int i = 0; i < 7; i++, cur *= 2) {
    if (w[i]) curl = cur;
    vector<vector<long long> > mat(cur);
    for (int mask1 = 0; mask1 < cur; mask1++) {
      mat[mask1].resize(cur);
      for (int mask2 = 0; mask2 < cur; mask2++) {
        for (int mask = 0; mask < cur / 2; mask++) {
          long long nw = mask + cur / 2;
          if (!(nw & mask1 & mask2 & ((nw << 1) + 1))) {
            mat[mask1][mask2] += 1;
          }
        }
      }
    }
    init_mat(cur);
    mat = binpow(mat, w[i]);
    for (int mask1 = 0; mask1 < cur; mask1++) {
      for (int mask2 = 0; mask2 < cur; mask2++) {
        dp2[mask2] += (dp[mask1] * mat[mask1][mask2]) % MOD;
        dp2[mask2] %= MOD;
      }
    }
    for (int j = 0; j < cur; j++) {
      dp[j + cur] = dp2[j];
      dp[j] = 0;
      dp2[j] = 0;
    }
  }
  cout << dp[255] % MOD;
}
