#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void amin(T &x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
inline void amax(T &x, U y) {
  if (x < y) x = y;
}
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= 1000000007;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % 1000000007;
    a = a * a % 1000000007;
  }
  return res;
}
long long C[101][101];
void ff() {
  memset(C, 0, sizeof(C));
  for (int i = 0; i < 101; i++) {
    for (int j = 0; j < i + 1; j++) {
      if (i == j || j == 0)
        C[i][j] = 1;
      else
        C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % 1000000007;
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  long long i, j, n, m;
  cin >> n;
  long long a[10];
  for (int i = 0; i < 10; i++) cin >> a[i];
  ff();
  long long dp[n + 1][n + 1][10];
  long long tot[n + 1][10];
  memset(tot, 0, sizeof(tot));
  memset(dp, 0, sizeof(dp));
  for (int i = a[9]; i < n + 1; i++) dp[i][i][9] = 1, tot[i][9] = 1;
  for (int i = 9 - 1; i >= 1; i--) {
    for (int j = 0; j < n + 1; j++) {
      for (int k = a[i]; k < n + 1; k++) {
        if (k <= j) dp[j][k][i] = (tot[j - k][i + 1] * C[j][k]) % 1000000007;
        tot[j][i] += dp[j][k][i];
        tot[j][i] %= 1000000007;
      }
    }
  }
  long long ans = 0;
  for (int j = 0; j < n + 1; j++) {
    for (int k = a[0]; k < n + 1; k++) {
      if (k <= j - 1) dp[j][k][0] = (tot[j - k][1] * C[j - 1][k]) % 1000000007;
      tot[j][0] += dp[j][k][0];
      tot[j][0] %= 1000000007;
    }
    ans += tot[j][0];
    ans %= 1000000007;
  }
  cout << ans;
  return 0;
}
