#include <bits/stdc++.h>
using namespace std;
int w[8];
long long mod = 1000000007;
long long ans[8][1 << 8];
struct rec {
  int a[1 << 7][1 << 7];
  void init() { memset(a, 0, sizeof(a)); }
} e, b, c;
rec chen(rec b, rec c, int k) {
  rec d;
  d.init();
  for (int i = 0; i < (1 << k); i++)
    for (int j = 0; j < (1 << k); j++)
      for (int z = 0; z < (1 << k); z++) {
        long long tmp = b.a[i][z];
        tmp = tmp * c.a[z][j] % mod;
        d.a[i][j] = (d.a[i][j] + tmp) % mod;
      }
  return d;
}
rec mul(rec b, int ci, int k) {
  if (ci == 0) return e;
  if (ci == 1) return b;
  rec d = mul(b, ci / 2, k);
  d = chen(d, d, k);
  if (ci & 1) d = chen(d, b, k);
  return d;
}
void make(int k) {
  for (int i = 0; i < (1 << k); i++)
    for (int j = 0; j < (1 << k); j++) {
      b.a[i][j] = 0;
      for (int z = 0; z < (1 << (k - 1)); z++) {
        int f = 1 + z * 2 + (1 << k), ov = 1;
        for (int t = 0; t < k; t++)
          if ((i & (1 << t) && (j & (1 << t)) && (f & (1 << t)) &&
               (f & (1 << (t + 1)))))
            ov = 0;
        b.a[i][j] += ov;
      }
    }
  e.init();
  for (int i = 0; i < (1 << 7); i++) e.a[i][i] = 1;
  c = mul(b, w[k], k);
}
int main() {
  for (int i = 1; i <= 7; i++) cin >> w[i];
  ans[0][1] = 1;
  for (int i = 1; i <= 7; i++) {
    make(i);
    for (int j = 0; j < (1 << i); j++)
      for (int k = 0; k < (1 << i); k++)
        ans[i][k + (1 << i)] =
            (ans[i][k + (1 << i)] + ans[i - 1][j] * c.a[j][k]) % mod;
  }
  cout << ans[7][(1 << 8) - 1] << endl;
}
