#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<unordered_set>
#include<unordered_map>
using namespace std;
typedef long long ll;
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define all(x) x.begin(),x.end()
#define rep(i,n) for(int i=0;i<n;i++)
#define mod 1000000007
#define mad(a,b) a=(a+b)%mod
#define N 1010
ll po(ll x,ll y){
    ll res=1;
    for(;y;y>>=1){
	if(y&1)res=res*x%mod;
	x=x*x%mod;
    }
    return res;
}
ll inv(ll x){
    return po(x,mod-2);
}
ll fac[N],ivf[N];
ll C(ll n,ll k){
    return fac[n]*ivf[n-k]%mod*ivf[k]%mod;
}
ll dp[N],cop[N];
int main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
    fac[0]=1;
    for(ll i=1;i<N;i++)fac[i]=fac[i-1]*i%mod;
    rep(i,N)ivf[i]=inv(fac[i]);
    ll n,k;
    cin>>n>>k;
    rep(i,n+1)dp[i]=0; dp[0]=1;
    rep(u,k){
	ll a; cin>>a;
	rep(i,n+1)cop[i]=dp[i],dp[i]=0;
	rep(i,n+1)for(int j=0;j+i<=n&&j<=a;j++){
	    mad(dp[i+j],cop[i]*C(n-i,j)%mod*C(n-j,a-j));
	}
    }
    cout<<dp[n]<<endl;
}
