#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const int mod = 1e9 + 7;
const int NN = (1 << 7);
int mat[NN][NN];
int ans[NN][NN];
int t[NN][NN];
int dp[NN], d[NN];
void multi(int a[NN][NN], int b[NN][NN], int n) {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) t[i][j] = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      for (int k = 0; k < n; k++) {
        t[i][j] += (LL)a[i][k] * b[k][j] % mod;
        if (t[i][j] >= mod) t[i][j] -= mod;
      }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) a[i][j] = t[i][j];
}
int main() {
  dp[0] = 1;
  for (int L = 1, w, n; L <= 7; L++) {
    scanf("%d", &w);
    n = (1 << L);
    for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++) mat[i][j] = 0, ans[i][j] = (i == j);
    for (int lft = n; lft--;)
      for (int rgt = n; rgt--;) {
        for (int B = n >> 1; B--;) {
          int ok = 1;
          for (int i = 1; i <= L && ok; i++)
            if (!((i > 1 && (B & (1 << i - 2))) ||
                  (i < L && (B & (1 << i - 1))) || (lft & (1 << i - 1)) ||
                  (rgt & (1 << i - 1))))
              ok = 0;
          mat[rgt][lft] += ok;
        }
      }
    while (w) {
      if (w & 1) multi(ans, mat, n);
      multi(mat, mat, n);
      w >>= 1;
    }
    for (int i = 0; i < n; i++) d[i] = dp[i], dp[i] = 0;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        dp[i] += (LL)ans[i][j] * d[j] % mod;
        if (dp[i] >= mod) dp[i] -= mod;
      }
    }
  }
  printf("%d\n", dp[0]);
  return 0;
}
