#include <bits/stdc++.h>
using namespace std;
const unsigned long long MOD1 = 1e9 + 7, MOD2 = 1e9 + 9, MMOD1 = MOD1 * MOD1,
                         MMOD2 = MOD2 * MOD2;
const long long INF = 1e18;
const double pi = 3.14159265358979;
const int N = 1e2 + 9, inf = 1e9, mod = 1e9 + 7;
long long dp[12][N], comb[N][N], tmp[N][N];
int cnt[N];
void add(long long &a, long long b) {
  a += b;
  a %= mod;
}
long long my_rand() {
  long long a = rand();
  long long b = rand();
  return a * (RAND_MAX + 1) + b;
}
void init() {
  for (int x = 0; x < N; x++) {
    memset(tmp, 0, sizeof tmp);
    tmp[0][0] = 1;
    for (int i = 1; i < N; i++) {
      long long sum = 0;
      for (int k = 0; k <= x; k++) {
        add(sum, tmp[i - 1][k]);
        add(tmp[i][k], sum);
      }
      add(comb[x][i], tmp[i][x]);
    }
  }
}
int main() {
  srand(chrono::steady_clock::now().time_since_epoch().count());
  ios::sync_with_stdio(false), cin.tie(0);
  int n;
  cin >> n;
  for (int i = 0; i <= 9; i++) {
    cin >> cnt[i];
  }
  init();
  dp[10][0] = 1;
  for (int i = 9; i > 0; i--) {
    for (int x = cnt[i]; x <= n; x++) {
      for (int j = 0; j + x <= n; j++) {
        add(dp[i][j + x], dp[i + 1][j] * comb[x][j + 1] % mod);
      }
    }
  }
  for (int x = cnt[0]; x <= n; x++) {
    for (int j = 0; j + x <= n; j++) {
      add(dp[0][j + x], dp[1][j] * comb[x][j] % mod);
    }
  }
  long long ans = 0;
  for (int i = 0; i <= n; i++) {
    add(ans, dp[0][i]);
  }
  cout << ans << '\n';
  return 0;
}
