#include <bits/stdc++.h>
static const int N = 1e3 + 1;
static const int M = 1 << 7;
static const int MOD = (int)1e9 + 7;
struct matrix {
  int a[M][M];
};
int w[7];
int f[7][M];
int g[M];
int c[M];
matrix m;
int mul(int a, int b) { return (long long)a * b % MOD; }
void mul(matrix &a, const matrix &b, int s) {
  static matrix c;
  for (int i = 0; i < s; i++)
    for (int j = 0; j < s; j++) c.a[i][j] = 0;
  for (int i = 0; i < s; i++) {
    for (int j = 0; j < s; j++) {
      for (int k = 0; k < s; k++) {
        c.a[i][j] = c.a[i][j] + mul(a.a[i][k], b.a[k][j]);
        if (c.a[i][j] >= MOD) c.a[i][j] -= MOD;
      }
    }
  }
  for (int i = 0; i < s; i++)
    for (int j = 0; j < s; j++) a.a[i][j] = c.a[i][j];
}
void pow(matrix &a, int n, int s) {
  static matrix b;
  for (int i = 0; i < s; i++)
    for (int j = 0; j < s; j++) b.a[i][j] = i == j;
  while (n > 0) {
    if (n & 1) mul(b, a, s);
    mul(a, a, s);
    n >>= 1;
  }
  for (int i = 0; i < s; i++)
    for (int j = 0; j < s; j++) a.a[i][j] = b.a[i][j];
}
int main() {
  for (int i = 0; i < 7; i++) scanf("%d", w + i);
  for (int i = 0; i < 7; i++) {
    if (i == 0)
      f[i][0] = 1;
    else {
      for (int k = 0; k < 1 << i; k++) f[i][k] = f[i - 1][k];
    }
    for (int j = 0; j < M; j++) {
      for (int k = 0; k < M; k++) m.a[j][k] = 0;
      g[j] = c[j] = 0;
    }
    for (int j = 0; j < 1 << i + 1; j++) {
      for (int k = 0; k < 1 << i; k++) {
        bool valid = true;
        for (int l = 0; l <= i; l++) {
          bool lr = (j & (1 << l)) == 0;
          bool u = l == i || (k & (1 << l)) > 0;
          bool d = l == 0 || (k & (1 << l - 1)) > 0;
          if (lr && u && d) valid = false;
        }
        if (valid) c[j]++;
      }
    }
    for (int j = 0; j < 1 << i + 1; j++) {
      for (int k = 0; k < 1 << i + 1; k++) {
        m.a[j][k] += c[j | k];
        if (m.a[j][k] >= MOD) m.a[j][k] -= MOD;
      }
    }
    pow(m, w[i], 1 << i + 1);
    for (int j = 0; j < 1 << i + 1; j++) {
      for (int k = 0; k < 1 << i + 1; k++) {
        g[j] = g[j] + mul(f[i][k], m.a[k][j]);
        if (g[j] >= MOD) g[j] -= MOD;
      }
    }
    for (int j = 0; j < 1 << i + 1; j++) f[i][j] = g[j];
  }
  printf("%d", f[6][0]);
  return 0;
}
