#include <bits/stdc++.h>
using namespace std;
const int N = 128;
const int MOD = 1000000007;
struct Matrix {
  int n, m;
  long long v[N][N];
  Matrix(int _n, int _m) {
    n = _n, m = _m;
    memset(v, 0, sizeof(v));
  }
  Matrix operator*(const Matrix &b) {
    Matrix c(n, b.m);
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < b.m; ++j) {
        c.v[i][j] = 0;
        for (int k = 0; k < m; ++k) c.v[i][j] += v[i][k] * b.v[k][j] % MOD;
      }
    }
    for (int i = 0; i < n; ++i)
      for (int j = 0; j < b.m; ++j) c.v[i][j] %= MOD;
    return c;
  }
  void print(int x, int y) {
    for (int i = 0; i < x; ++i) {
      for (int j = 0; j < y; ++j) printf("%lld ", v[i][j]);
      printf("\n");
    }
  }
};
void build(int n, Matrix &a) {
  int bound1 = (1 << n), bound2 = (1 << (n - 1));
  for (int i = 0; i < bound1; ++i) {
    for (int j = i; j < bound1; ++j) {
      if (i == 1 && j == 2) {
      }
      for (int k = 0; k < bound2; ++k) {
        int val = (k << 1) | 1;
        val = val | (1 << n);
        int flag = false;
        for (int p = 0; p < n; ++p) {
          if ((i & (1 << p)) && (j & (1 << p)) && (val & (1 << p)) &&
              (val & (1 << (p + 1)))) {
            flag = true;
            break;
          }
        }
        if (!flag) {
          a.v[j][i]++;
        }
      }
    }
  }
  for (int i = 0; i < bound1; ++i) {
    for (int j = i; j < bound1; ++j) {
      a.v[i][j] = a.v[j][i];
    }
  }
}
Matrix powMod(Matrix a, int b) {
  Matrix res(a.n, a.n);
  for (int i = 0; i < a.n; ++i) res.v[i][i] = 1;
  while (b != 0) {
    if (b & 1) res = res * a;
    a = a * a;
    b >>= 1;
  }
  return res;
}
int main() {
  Matrix vec(128, 1);
  vec.v[1][0] = 1;
  int w;
  for (int i = 1; i <= 7; ++i) {
    Matrix a((1 << i), (1 << i));
    build(i, a);
    scanf("%d", &w);
    vec = powMod(a, w) * vec;
    if (i != 7) {
      for (int j = 0; j < (1 << i); ++j) {
        vec.v[(j | (1 << i))][0] = vec.v[j][0];
        vec.v[j][0] = 0;
      }
    }
  }
  printf("%lld\n", vec.v[127][0]);
  return 0;
}
