#include <bits/stdc++.h>
 
#define endl '\n'
#define fi first
#define se second
#define MOD(n,k) ( ( ((n) % (k)) + (k) ) % (k))
#define forn(i,n) for (int i = 0; i < n; i++)
#define forr(i,a,b) for (int i = a; i <= b; i++)
#define all(v) v.begin(), v.end()
#define pb push_back
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> ii;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
typedef vector<ll> vl;
typedef vector<ii> vii;

const int MX = 1005, mod = 1000000007;
int n, k, a[MX];
ll mem[22][MX], fac[MX], inv[MX];

ll pot (ll b, int p) {
	ll res = 1;
	while (p) {
		if (p & 1) (res *= b) %= mod;
		(b *= b) %= mod;
		p /= 2;
	}
	return res;
}

ll comb (int n, int k) {
	if (n < k || n < 0 || k < 0) return 0;
	return fac[n] * inv[k] % mod * inv[n - k] % mod;
}

ll dp (int i, int j) {
	if (i == k) return j == 0;

	ll &res = mem[i][j];
	if (res != -1) return res;
	res = 0;

	for (int l = 0; l <= min(j, a[i]); l++)
		(res += comb(n - l, a[i] - l) * inv[l] % mod * dp(i + 1, j - l)) %= mod;

	return res;
}

int main () {
	ios_base::sync_with_stdio(0); cin.tie(0);
	fac[0] = inv[0] = 1;
	for (int i = 1; i < MX; i++) {
		fac[i] = fac[i-1] * i % mod;
		inv[i] = pot(fac[i], mod - 2);
	}

	cin >> n >> k;
	for (int i = 0; i < k; i++)
		cin >> a[i];

	memset(mem, -1, sizeof(mem));
	cout << fac[n] * dp(0, n) % mod << endl;

	return 0;
}