#include #include #include #include #include #include #include #include #include #include #include #include #include #define repd(i,a,b) for (int i=(int)(a);i<(int)(b);i++) #define rep(i,n) repd(i,0,n) #define all(x) (x).begin(),(x).end() #define mod 1000000007 #define inf 2000000007 #define mp make_pair #define pb push_back typedef long long ll; using namespace std; template inline void output(T a, int p) { if(p) cout << fixed << setprecision(p) << a << "\n"; else cout << a << "\n"; } // end of template ll pow_mod(ll a, ll b, ll m){ ll ret = 1; while (b > 0) { if (b & 1) { ret = ret * a % m; } a = a * a % m; b >>= 1; } return ret; } ll inv_mod(ll a, ll m){ return pow_mod(a, m - 2, m); } ll fact(ll n, ll m){ ll ret = 1; repd(i, 1, n + 1){ (ret *= i) %= m; } return ret; } ll comb(ll n, ll k, ll m){ ll fn = fact(n, m); ll fk = fact(k, m); ll fnk = fact(n - k, m); ll b = inv_mod(fk * fnk % m, m); return fn * b % m; } int main() { cin.tie(0); ios::sync_with_stdio(0); // source code ll M; cin >> M; vector H; ll sum = 0; ll cnt = 0; ll h; while(cin >> h){ sum += h; H.pb(h); cnt++; } if(sum + cnt - 1 > M){ output("NA", 0); return 0; } if(H[0] == 0){ output(1, 0); return 0; } ll ret = comb(M - sum + 1, cnt, mod); output((ret + mod) % mod, 0); return 0; }