#include<bits/stdc++.h>
#define pi 3.1415926535897932384626
using namespace std;
      
struct P{
  int x,y;
  bool operator < (const P &a )const{
    //if(y!=a.y)
    return y>a.y;
  };
};

int a,b,c,d,i,k,n,m,e,dx[10]={1,0,-1,0,1,1,-1,-1},dy[10]={0,1,0,-1,1,-1,1,-1};
int o[101];
long long l[23][1010];
long long ff[2000],re[2000];
int j[2];

long long x,y,z,mod=1000000007;
//string r;
char r[1];

P u[100101];
priority_queue<int,vector<int>,greater<int> > q;

//stack<int> s;
set<int> s;
map<int,int> p[100101];
vector<int> v[100101];

bool as(P a,P b)
{
  if(a.x==b.x)
  return a.y<b.y;
  return a.x<b.x;
}

long long g(long long x,long long y)
{
  long long p=1;
  for(;y;x*=x,x%=mod,y/=2)
    if(y%2)
    p*=x,p%=mod;
  return p;
}

long long f(int n,int m)
{
  if(n>a)
  {
    //if(m==b) printf("%lld\n",ff[b]);
    if(m==b) return 1;
    return 0;
  }
  if(l[n][m]>=0) return l[n][m];
  long long x=0;
  for(int i=0;i+m<=b&&i<=o[n];i++)
  {
    x+=f(n+1,m+i)*ff[b-i]%mod*re[o[n]-i]%mod*re[b-o[n]]%mod*re[i]%mod;
    x%=mod;
  }
  return l[n][m]=x;
}

int main()
{
  memset(l,-1,sizeof(l));
  scanf("%d %d",&b,&a);
  for(int t=1;t<=a;t++)
    scanf("%d",&o[t]);
  ff[0]=re[0]=1;
  for(int t=1;t<=1000;t++)
    ff[t]=ff[t-1]*t%mod,re[t]=g(ff[t],mod-2);
  printf("%lld",f(1,0)*ff[b]%mod);
  
}

