#include <bits/stdc++.h>
using namespace std;
const int MODULO = (int)1e9 + 7;
vector<vector<int> > multiply(const vector<vector<int> > &a,
                              const vector<vector<int> > &b) {
  vector<vector<int> > result(a.size(), vector<int>(b[0].size()));
  for (int i = 0; i < (int)a.size(); ++i) {
    for (int j = 0; j < (int)a[0].size(); ++j) {
      for (int k = 0; k < (int)b[0].size(); ++k) {
        result[i][k] = (result[i][k] + 1LL * a[i][j] * b[j][k]) % MODULO;
      }
    }
  }
  return result;
}
vector<vector<int> > identity(int n) {
  vector<vector<int> > result(n, vector<int>(n));
  for (int i = 0; i < n; ++i) {
    result[i][i] = 1;
  }
  return result;
}
vector<vector<int> > power(vector<vector<int> > a, int n) {
  vector<vector<int> > result(identity(a.size()));
  while (n > 0) {
    if (n % 2 != 0) {
      result = multiply(result, a);
    }
    a = multiply(a, a);
    n /= 2;
  }
  return result;
}
int calc(int mask1, int mask2, int n) {
  int ways0 = 0;
  int ways1 = 1;
  for (int i = 0; i < n; ++i) {
    int nways0 = ways0 + ways1;
    int nways1 = ways0;
    if ((mask1 & 1 << i) == 0 || (mask2 & 1 << i) == 0) {
      nways1 += ways1;
    }
    ways0 = nways0 % MODULO;
    ways1 = nways1 % MODULO;
  }
  return ways1;
}
int main() {
  ios::sync_with_stdio(false);
  int w[8];
  for (int i = 1; i <= 7; ++i) {
    cin >> w[i];
  }
  vector<vector<int> > result(1, vector<int>(1, 1));
  for (int n = 1; n <= 7; ++n) {
    vector<vector<int> > first(1 << n, vector<int>(1));
    for (int mask = 0; mask < (int)result.size(); ++mask) {
      first[mask << 1 | 1][0] = result[mask][0];
    }
    vector<vector<int> > base(1 << n, vector<int>(1 << n));
    for (int mask1 = 0; mask1 < 1 << n; ++mask1) {
      for (int mask2 = 0; mask2 < 1 << n; ++mask2) {
        base[mask1][mask2] = calc(mask1, mask2, n);
      }
    }
    result = multiply(power(base, w[n]), first);
  }
  cout << result.back().front() << '\n';
  return 0;
}
