#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int w[128];
struct Matrix {
  int a[128][128];
  int x, y;
  Matrix() { memset(a, 0, sizeof a); }
  friend Matrix operator*(Matrix a, Matrix b) {
    Matrix ans;
    ans.x = a.x;
    ans.y = b.y;
    for (int k = 0; k < a.y; k++)
      for (int i = 0; i < a.x; i++)
        if (a.a[i][k])
          for (int j = 0; j < b.y; j++) {
            ans.a[i][j] += 1ll * a.a[i][k] * b.a[k][j] % 1000000007;
            if (ans.a[i][j] >= 1000000007) ans.a[i][j] -= 1000000007;
          }
    return ans;
  }
  friend Matrix operator^(Matrix a, int n) {
    Matrix ans;
    ans.y = ans.x = a.x;
    for (int i = 0; i < ans.x; i++) ans.a[i][i] = 1;
    for (; n; n >>= 1, a = a * a)
      if (n & 1) ans = ans * a;
    return ans;
  }
} a, b;
int main() {
  for (int i = 0; i < 7; i++) w[i] = read();
  a.x = 1;
  a.y = 2;
  a.a[0][0] = 0;
  a.a[0][1] = 1;
  for (int i = 0; i < 7; i++) {
    b.x = b.y = (1 << (i + 1));
    for (int j = 0; j < b.y; j++)
      for (int k = 0; k < b.x; k++) {
        int cnt = 0;
        for (int l = 0; l < (1 << i); l++) {
          int flag = 1;
          if (i == 0 && j == 1 && k == 1)
            flag = 0;
          else
            for (int z = 0; z <= i; z++)
              if ((j & (1 << z)) && (k & (1 << z))) {
                if (z == 0 && (l & (1 << z))) {
                  flag = 0;
                  break;
                }
                if (z == i && (l & (1 << (z - 1)))) {
                  flag = 0;
                  break;
                }
                if (z > 0 && z < i && (l & (1 << z)) && (l & (1 << (z - 1)))) {
                  flag = 0;
                  break;
                }
              }
          cnt += flag;
        }
        b.a[k][j] = cnt;
      }
    b = b ^ w[i];
    a = a * b;
    int add = (1 << (i + 1));
    for (int j = 0; j < a.y; j++) {
      a.a[0][j + add] = a.a[0][j];
      a.a[0][j] = 0;
    }
    a.y <<= 1;
  }
  printf("%d\n", a.a[0][a.y - 1]);
  return 0;
}
