#include <bits/stdc++.h>
#include "../lib/math/comb.hpp"

using namespace std;

#define SZ(x) (int)(x.size())

using ll = long long;
using ld = long double;
using P = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vector<int>>;
using vll = vector<ll>;
using vvll = vector<vector<ll>>;
const double eps = 1e-10;
const ll MOD = 1000000007;
const int INF = 1000000000;
const ll LINF = 1ll<<50;

template<typename T>
void printv(const vector<T>& s) {
  for(int i=0;i<(int)(s.size());++i) {
    cout << s[i];
    if(i == (int)(s.size())-1) cout << endl;
    else cout << " ";
  }
}

template<typename T1, typename T2>
ostream& operator<<(ostream &os, const pair<T1, T2> p) {
  os << p.first << ":" << p.second;
  return os;
}

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cout << fixed << setprecision(10);

  ll n, k; cin >> n >> k;
  vll a(k);
  for(int i=0;i<k;++i) {
    cin >> a[i];
  }

  vvll dp(k+1, vll(n+1, 0));
  dp[0][0] = 1;

  Combination<MOD> comb(1000000);

  for(int i=0;i<k;++i) {
    for(int j=0;j<=n;++j) {
      for(int l=0;(l+j<=n && l<=a[i]);++l) {
        dp[i+1][j+l] += dp[i][j] * comb.C(n-j, l) % MOD * comb.C(n-l, a[i]-l) % MOD;
        dp[i+1][j+l] %= MOD;
      }
    }
  }

  cout << dp[k][n] << endl;

}
