#include <bits/stdc++.h>
using namespace std;
template <class T>
void cmax(T& a, T b) {
  a = max(a, b);
}
template <class T>
void cmin(T& a, T b) {
  a = min(a, b);
}
void _BG(const char* s) {}
template <class T, class... TT>
void _BG(const char* s, T a, TT... b) {
  for (int c = 0; *s && (c || *s != ','); ++s) {
    cerr << *s;
    for (char x : "([{") c += *s == x;
    for (char x : ")]}") c -= *s == x;
  }
  cerr << " = " << a;
  if (*s) {
    cerr << ", ";
    _BG(++s, b...);
  } else
    cerr << endl;
}
bool RD() { return 1; }
bool RD(char& a) { return scanf(" %c", &a) == 1; }
bool RD(char* a) { return scanf("%s", a) == 1; }
bool RD(double& a) { return scanf("%lf", &a) == 1; }
bool RD(int& a) { return scanf("%d", &a) == 1; }
bool RD(long long& a) { return scanf("%lld", &a) == 1; }
template <class T, class... TT>
bool RD(T& a, TT&... b) {
  return RD(a) && RD(b...);
}
void PT(const char a) { putchar(a); }
void PT(const char* a) { fputs(a, stdout); }
void PT(char* a) { fputs(a, stdout); }
void PT(const double a) { printf("%.16f", a); }
void PT(const int a) { printf("%d", a); }
void PT(const long long a) { printf("%lld", a); }
template <char s = ' ', char e = '\n'>
void PL() {
  if (e) PT(e);
}
template <char s = ' ', char e = '\n', class T, class... TT>
void PL(const T& a, const TT&... b) {
  PT(a);
  if (sizeof...(b) && s) PT(s);
  PL<s, e>(b...);
}
const int N = 106, M = 1e9 + 7;
int dp[N], f[N], fi[N];
int add(int a, int b) { return (a += b) < M ? a : a - M; }
int mul(int a, int b) { return a * 1LL * b % M; }
void pre() {
  f[0] = fi[0] = fi[1] = 1;
  for (int i(1); i < (N); ++i) f[i] = mul(i, f[i - 1]);
  for (int i(2); i < (N); ++i) fi[i] = mul(M - M / i, fi[M % i]);
  for (int i(2); i < (N); ++i) fi[i] = mul(fi[i], fi[i - 1]);
}
int C(int n, int k) { return k > n ? 0 : mul(f[n], mul(fi[k], fi[n - k])); }
int main() {
  pre();
  int n, a0;
  RD(n, a0);
  dp[0] = 1;
  int s = 0;
  for (int i(1); i < ((9) + 1); ++i) {
    int a;
    RD(a);
    s += a;
    for (int j(((n) + 1) - 1); j >= (s); --j) {
      int v = 0;
      for (int k(a); k < ((j) + 1); ++k) v = add(v, mul(dp[j - k], C(j, k)));
      dp[j] = v;
    }
    fill_n(dp, s, 0);
  }
  s += a0;
  int ans = 0;
  for (int j(((n) + 1) - 1); j >= (s); --j) {
    int v = 0;
    for (int k(a0); k < ((j) + 1); ++k) v = add(v, mul(dp[j - k], C(j - 1, k)));
    ans = add(ans, v);
  }
  PL(ans);
}
