#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
const int MOD = 1000000007;
const long long LIM = LLONG_MAX - (long long)MOD * MOD;
const int N = 128;
int w[8];
int ways[N];
int A[N][N];
int B[N][N];
int C[N][N];
void mmult(int A[N][N], int B[N][N], int C[N][N]) {
  for (int i = (0); i < (N); ++i)
    for (int j = (0); j < (N); ++j) {
      long long cur = 0;
      for (int k = (0); k < (N); ++k) {
        cur += (long long)A[i][k] * B[k][j];
        if (cur > LIM) cur %= MOD;
      }
      C[i][j] = cur % MOD;
    }
}
void mpow(int A[N][N], int x) {
  for (int i = (0); i < (N); ++i)
    for (int j = (0); j < (N); ++j) B[i][j] = A[i][j];
  for (int i = (0); i < (N); ++i)
    for (int j = (0); j < (N); ++j) A[i][j] = i == j ? 1 : 0;
  for (int at = 0; (1 << at) <= x; ++at) {
    if (x & (1 << at)) {
      mmult(A, B, C);
      for (int i = (0); i < (N); ++i)
        for (int j = (0); j < (N); ++j) A[i][j] = C[i][j];
    }
    mmult(B, B, C);
    for (int i = (0); i < (N); ++i)
      for (int j = (0); j < (N); ++j) B[i][j] = C[i][j];
  }
}
int c[N];
void vmult(int b[N], int A[N][N]) {
  for (int j = (0); j < (N); ++j) {
    long long cur = 0;
    for (int i = (0); i < (N); ++i) {
      cur += (long long)b[i] * A[i][j];
      if (cur > LIM) cur %= MOD;
    }
    c[j] = cur % MOD;
  }
  for (int j = (0); j < (N); ++j) b[j] = c[j];
}
void run() {
  for (int i = (1); i <= (7); ++i) scanf("%d", &w[i]);
  memset(ways, 0, sizeof(ways));
  ways[0] = 1;
  for (int i = (1); i <= (7); ++i)
    if (w[i] != 0) {
      memset(A, 0, sizeof(A));
      for (int lft = (0); lft < (1 << i); ++lft)
        for (int mid = (0); mid < (1 << (i - 1)); ++mid)
          for (int rgt = (0); rgt < (1 << i); ++rgt) {
            bool ok = true;
            for (int j = (0); j < (i); ++j) {
              if (lft & (1 << j)) continue;
              if (rgt & (1 << j)) continue;
              if (j != 0 && mid & (1 << (j - 1))) continue;
              if (j != i - 1 && mid & (1 << j)) continue;
              ok = false;
              break;
            }
            if (!ok) continue;
            A[lft][rgt]++;
          }
      mpow(A, w[i]);
      vmult(ways, A);
    }
  printf("%d\n", ways[0]);
}
int main() {
  run();
  return 0;
}
