#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <random>
#include <iomanip>
#include <cassert>
#include <complex>
#include <functional>
 
using namespace std;
 
typedef long long ll;

const int N = 1e3 + 7;
const int K = 21;

int f[N];
int rf[N];

const int md = 1e9 + 7;

int mul(int a, int b) {
  return ((ll)a * b) % md;
}

int power(int a, ll b) {
  int res = 1;
  while (b > 0) {
    if (b & 1) res = mul(res, a);
    a = mul(a, a);
    b >>= 1;
  }
  return res;
}

int inv(int a) {
  return power(a, md - 2);
}

int C(int n, int k) {
  return mul(f[n], mul(rf[n - k], rf[k]));
}

int dp[K][N];

int main() {
  ios_base::sync_with_stdio(false); cin.tie(0);
#ifdef LOCAL
  freopen("input.txt", "r", stdin);
#endif
  f[0] = 1;
  for (int i = 1; i < N; ++i) {
    f[i] = mul(f[i - 1], i);
  }
  for (int i = 0; i < N; ++i) {
    rf[i] = inv(f[i]);
  }
  int n, k;
  cin >> n >> k;
  vector <int> a(k);
  for (int i = 0; i < k; ++i) {
    cin >> a[i];
  }
  dp[0][0] = 1;
  for (int i = 1; i <= k; ++i) {
    for (int j = 0; j <= a[i - 1]; ++j) {
      for (int k = 0; k + j <= n; ++k) {
        dp[i][k + j] += mul(mul(dp[i - 1][k], C(n - j, a[i - 1] - j)), inv(f[j]));
        dp[i][k + j] %= md;
      }
    }
  }
  cout << mul(dp[k][n], f[n]) << '\n';
}
