// ROOT : DRAGON3012009
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#pragma GCC optimize("O2")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 1000000007
#define MAXN 10001
#define INF (1ll<<30)
#define BLOCK_SIZE 425
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 256
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
using namespace chrono ;
const ll MOD[] = {(ll )1e9 + 2277, (ll )1e9 + 5277, (ll )1e9 + 8277, (ll )1e9 + 9277, (ll ) 1e9 + 7 };
const ll NMOD = 1;
const int dx[] = {-1, 0, 1,0};
const int dy[] = {0, 1, 0, -1};
//**Variable**//
ll n ;
ll arr[MAXN];
ll frag[MAXN] ;
ll rev_frag[MAXN] ;
//**Struct**//
//**Function**//
template<class X, class Y >
bool minimize(X & x, const Y &y ) {
return x > y ? x = y, 1:0 ;
}
template<class X, class Y >
bool maximize(X &x, const Y &y ) {
return x < y ? x = y, 1:0 ;
}
ll power(ll a , ll b) {
ll res = 1;
while(b ) {
if(b & 1 ) res =res * a % M ;
b >>=1 ;
a = a * a % M;
}
return res ;
}
ll add(ll a , ll b ) {
return (a + b ) % M ;
}
ll mul(ll a, ll b ) {
return a * b % M ;
}
void init() {
cin>>n;
FOR(i,0 , 9 ) cin >> arr[i] ;
frag[0] = 1 ;
rev_frag[0]= 1;
FOR(i , 1, MAXN - 1 ) frag[i] = frag[i-1] * i % M ;
FOR(i , 1 , MAXN -1 ) rev_frag[i] = power(frag[i] , M-2 ) ;
}
ll C(ll k , ll m ) {
if( k > m ) return 0 ;
return frag[m] * rev_frag[m - k] % M * rev_frag[k] % M ;
}
ll dp[20][201] ;
ll dp_len(ll len ) {
memset(dp , 0 , sizeof dp ) ;
dp[0][len] = 1 ;
FOR(i , 0 , 9 ) FOR(j , 0 , len ) { // j cho con bao nhieu so
if(j < arr[i] ) continue ;
ll conlai = j ;
FOR(k , arr[i] , conlai ) {
if(i == 0 ) dp[i + 1 ][j - k ] = add(dp[i + 1 ][j-k] , mul(dp[i][j] , C(k , j - 1 )) ) ;
else dp[i + 1 ][j - k ] = add(dp[i + 1 ][j-k] , mul(dp[i][j] , C(k , j )) ) ;
}
}
return dp[10][0] ;
}
void solve() {
ll ans = 0 ;
FOR(i , 0 , n ) ans = add(ans , dp_len(i )) ;
cout << ans ;
}
__ROOT__ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
fast;
int t = 1; // cin >> t ;
while(t--) {
init();
solve();
}
return (0&0);
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgIGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgZWwgIlxuIgojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiNkZWZpbmUgX19ST09UX18gaW50IG1haW4oKQojcHJhZ21hIEdDQyBvcHRpbWl6ZSgiTzIiKQovLyNwcmFnbWEgR0NDIG9wdGltaXplKCJ1bnJvbGwtbG9vcHMiKQovLyNwcmFnbWEgR0NDIHRhcmdldCgiYXZ4MixibWksYm1pMixwb3BjbnQsbHpjbnQiKQojZGVmaW5lIEZPUihpLGwscikgZm9yKGludCBpID0gbCA7IGkgPD0gciA7IGkgKyspCiNkZWZpbmUgRk9SRChpLHIsbCkgZm9yKGludCBpID0gciA7IGkgPj0gbCA7IGkgLS0pCiNkZWZpbmUgUkVQKGksIGEgKSBmb3IoaW50IGkgPSAwIDsgaSA8IGEgOyBpICsrICkKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIE0gMTAwMDAwMDAwNwojZGVmaW5lIE1BWE4gMTAwMDEKI2RlZmluZSBJTkYgKDFsbDw8MzApCiNkZWZpbmUgQkxPQ0tfU0laRSA0MjUKI2RlZmluZSBNQVhfTk9ERSAxMDAxMDAxCiNkZWZpbmUgTE9HIDE5CiNkZWZpbmUgQUxQSEFfU0laRSAyNgojZGVmaW5lIEJBU0UgMjU2CiNkZWZpbmUgTkFNRSAiZmlsZSIKI2RlZmluZSBjb21wYXJlKHYpIHNvcnQoKHYpLmJlZ2luKCksICh2KS5lbmQoKSk7ICh2KS5lcmFzZSh1bmlxdWUoKHYpLmJlZ2luKCksICh2KS5lbmQoKSksICh2KS5lbmQoKSk7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBjaHJvbm8gOwpjb25zdCBsbCAgTU9EW10gPSB7KGxsICkxZTkgKyAyMjc3LCAobGwgKTFlOSArIDUyNzcsIChsbCApMWU5ICsgODI3NywgKGxsICkxZTkgKyA5Mjc3LCAobGwgKSAxZTkgKyA3IH07CmNvbnN0IGxsICBOTU9EID0gMTsKY29uc3QgaW50IGR4W10gPSB7LTEsIDAsIDEsMH07CmNvbnN0IGludCBkeVtdID0gezAsIDEsIDAsIC0xfTsKLy8qKlZhcmlhYmxlKiovLwpsbCAgbiA7CmxsICBhcnJbTUFYTl07CmxsICBmcmFnW01BWE5dIDsKbGwgIHJldl9mcmFnW01BWE5dIDsKLy8qKlN0cnVjdCoqLy8KCi8vKipGdW5jdGlvbioqLy8KdGVtcGxhdGU8Y2xhc3MgWCwgY2xhc3MgWSA+CmJvb2wgbWluaW1pemUoWCAmIHgsIGNvbnN0IFkgJnkgKSB7CiAgICByZXR1cm4geCA+IHkgPyB4ID0geSwgMTowIDsKfQp0ZW1wbGF0ZTxjbGFzcyBYLCBjbGFzcyBZID4KYm9vbCBtYXhpbWl6ZShYICZ4LCBjb25zdCBZICZ5ICkgewogICAgcmV0dXJuIHggPCB5ID8geCA9IHksIDE6MCA7Cn0KbGwgIHBvd2VyKGxsICBhICwgbGwgIGIpIHsKbGwgIHJlcyA9IDE7CiB3aGlsZShiICkgewogICAgaWYoYiAmIDEgKSByZXMgPXJlcyAqIGEgJSBNIDsKICAgIGIgPj49MSA7CiAgICBhID0gYSAqIGEgJSBNOwp9CnJldHVybiByZXMgOwp9CmxsICBhZGQobGwgIGEgLCBsbCAgYiApIHsKcmV0dXJuIChhICsgYiApICUgTSA7Cn0KbGwgbXVsKGxsIGEsICBsbCBiICkgewpyZXR1cm4gYSAqIGIgJSBNIDsKfQp2b2lkIGluaXQoKSB7CiAgICBjaW4+Pm47CiAgICBGT1IoaSwwICwgOSApIGNpbiA+PiBhcnJbaV0gOwogICAgZnJhZ1swXSA9IDEgOwogICAgcmV2X2ZyYWdbMF09ICAxOwogICAgRk9SKGkgLCAxLCAgTUFYTiAtIDEgICkgZnJhZ1tpXSA9IGZyYWdbaS0xXSAqIGkgJSBNIDsKICAgIEZPUihpICwgMSAsIE1BWE4gLTEgKSByZXZfZnJhZ1tpXSA9IHBvd2VyKGZyYWdbaV0gLCBNLTIgKSA7Cn0KbGwgIEMobGwgIGsgLCAgbGwgIG0gKSB7CmlmKCBrID4gbSApIHJldHVybiAwIDsKcmV0dXJuIGZyYWdbbV0gKiByZXZfZnJhZ1ttIC0ga10gJSBNICogcmV2X2ZyYWdba10gICUgTSA7Cn0KbGwgIGRwWzIwXVsyMDFdICA7CmxsICBkcF9sZW4obGwgIGxlbiApIHsKICAgIG1lbXNldChkcCAsIDAgLCBzaXplb2YgZHAgKSA7CiAgICBkcFswXVtsZW5dID0gMSA7CiAgICBGT1IoaSAsIDAgLCA5ICApIEZPUihqICwgMCAsIGxlbiApIHsgLy8gaiBjaG8gY29uIGJhbyBuaGlldSBzbwogICAgICAgIGlmKGogPCBhcnJbaV0gKSBjb250aW51ZSA7CiAgICAgICAgbGwgIGNvbmxhaSA9ICBqICA7CiAgICAgICAgRk9SKGsgLCBhcnJbaV0gLCBjb25sYWkgKSB7CiAgICAgICBpZihpID09IDAgKSBkcFtpICsgMSBdW2ogLSBrIF0gPSBhZGQoZHBbaSArIDEgXVtqLWtdICwgbXVsKGRwW2ldW2pdICwgQyhrICwgaiAtIDEgICkpICApIDsKICAgICAgICBlbHNlICBkcFtpICsgMSBdW2ogLSBrIF0gPSBhZGQoZHBbaSArIDEgXVtqLWtdICwgbXVsKGRwW2ldW2pdICwgQyhrICwgaiApKSAgKSA7CiAgICAgICAgfQoKICAgIH0KICAgIHJldHVybiBkcFsxMF1bMF0gOwp9CnZvaWQgc29sdmUoKSB7CiAgICBsbCAgYW5zID0gMCA7CiAgICBGT1IoaSAsIDAgLCBuICkgYW5zID0gYWRkKGFucyAsIGRwX2xlbihpICkpIDsKICAgIGNvdXQgPDwgYW5zIDsKfQoKX19ST09UX18gewogICAgLy8gZnJlb3BlbihOQU1FIi5pbnAiICwgInIiICwgc3RkaW4pOwogICAgLy8gZnJlb3BlbihOQU1FIi5vdXQiICwgInciLCBzdGRvdXQpIDsKICAgIGZhc3Q7CiAgICBpbnQgdCA9IDE7IC8vIGNpbiA+PiB0IDsKICAgIHdoaWxlKHQtLSkgewogICAgICAgIGluaXQoKTsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuICgwJjApOwp9CgoKCg==