#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#define re register
#define maxx 100005
using namespace std;
//priority_queue<int > q;
//vector<int > g[maxx];
inline int read(){
int x=0;int f=1;char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();
}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();
}
return x*f;
}
int n,m,t;
int a;
int f[10005][105];
long long ans=1;
int main()
{
n=read();m=read();
t=0;
for(re int i=1;i<=n;i++) f[i][0]=f[i][i]=1;
for(re int i=2;i<=n;i++){
for(re int j=1;j<=100;j++){
f[i][j]=(f[i-1][j]+f[i-1][j-1])%10007;
}
}
for(re int i=1;i<=m;i++) {
a=read();
ans=(ans*f[n][a])%10007;
n-=a;
}
printf("%lld",ans);
return 0;
}