#include <bits/stdc++.h>
using namespace std;

#define rep(i, N) for (int i = 0; i < (N); i++)
#define all(a) (a).begin(), (a).end()
#define pb push_back

using ll = long long;
using i_i = tuple<int, int>;

const int MOD = 1e9 + 7;

ll C[1010][1010];

int main() {
    for (int x = 0; x < 1010; x++) {
        C[x][0] = 1;
        for (int y = 1; y <= x; y++)
            C[x][y] = (C[x - 1][y - 1] + C[x - 1][y]) % MOD;
    }
    int N, K; cin >> N >> K;
    vector<int> a(K);
    rep(k, K) cin >> a[k];
    vector<ll> dp(N + 1);
    dp[0] = 1;
    rep(k, K) {
        vector<ll> _dp(N + 1);
        rep(x, N + 1) rep(dx, N - x + 1) {
            if (dx > a[k]) continue;
            int _x = x + dx;
            ll z = dp[x] * C[N - x][dx] % MOD * C[N - dx][a[k] - dx] % MOD;
            _dp[_x] = (_dp[_x] + z) % MOD;
        }
        dp = _dp;
    }
    cout << dp[N] << endl;
}
