#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int n, k;
int A[25], B[2];
int fact[25];
int mod(long long int a) { return (a % MOD + MOD) % MOD; }
int poww(int pw) {
  if (pw == 0) return 1;
  return 3 * poww(pw - 1);
}
int result = 0;
int precompute(int U1) {
  int ret = 0;
  int el = (n + 1) / 2, fl = n - el;
  int EL = (1 << el), FL = (1 << fl);
  map<pair<int, int>, int> store;
  int cnt, sum;
  for (int i = 0; i < FL; i++) {
    sum = cnt = 0;
    for (int bit = 0; bit < fl; bit++) {
      if (i & (1 << bit)) sum += A[el + bit], cnt++;
      if (sum > MOD) sum = MOD;
    }
    if (sum != MOD) store[pair<int, int>(sum, cnt)]++;
  }
  for (int i = 0; i < EL; i++) {
    sum = cnt = 0;
    for (int bit = 0; bit < el; bit++) {
      if (i & (1 << bit)) sum += A[bit], cnt++;
      if (sum > MOD) sum = MOD;
    }
    if (sum > U1) continue;
    for (int x = 0; x < fl + 1; x++) {
      pair<int, int> t = pair<int, int>(U1 - sum, x);
      if (store.count(t)) {
        int ff = mod((long long int)store[t] * fact[x + cnt]);
        ff = mod((long long int)ff * fact[n - x - cnt]);
        ret = mod(ret + ff);
      }
    }
  }
  result = mod(result - ret);
  return result;
}
int pc2(int U1, int U2) {
  int el = (n - 1) / 2, fl = n - el;
  int EL = poww(el), FL = poww(fl);
  precompute(U1);
  precompute(U2);
  if (U1 > U2) swap(U1, U2);
  U2 = U2 - U1;
  map<pair<pair<int, int>, int>, int> store;
  int sum1, sum2, ret = 0;
  int c1, c2;
  for (int i = 0; i < FL; i++) {
    sum1 = sum2 = c1 = c2 = 0;
    int t = i;
    for (int bit = 0; bit < fl; bit++) {
      if (t % 3 == 1) sum1 += A[el + bit], c1++;
      if (t % 3 == 2) sum2 += A[el + bit], c2++;
      t /= 3;
      if (sum1 > MOD) sum1 = MOD;
      if (sum2 > MOD) sum2 = MOD;
    }
    if (sum1 != MOD && sum2 != MOD)
      store[pair<pair<int, int>, int>(pair<int, int>(sum1, sum2),
                                      (c1 << 8) | c2)]++;
  }
  for (int i = 0; i < EL; i++) {
    sum1 = sum2 = c1 = c2 = 0;
    int t = i;
    for (int bit = 0; bit < el; bit++) {
      if (t % 3 == 1) sum1 += A[bit], c1++;
      if (t % 3 == 2) sum2 += A[bit], c2++;
      if (sum1 > MOD) sum1 = MOD;
      if (sum2 > MOD) sum2 = MOD;
      t /= 3;
    }
    if (sum1 > U1 || sum2 > U2) continue;
    for (int x = 0; x < fl + 1; x++) {
      for (int y = 0; y + x <= fl; y++) {
        if (x + y > fl) continue;
        pair<pair<int, int>, int> t = pair<pair<int, int>, int>(
            pair<int, int>(U1 - sum1, U2 - sum2), (x << 8) | y);
        if (store.count(t)) {
          int ff = store[t];
          ff = mod((long long int)ff * fact[c1 + x]);
          ff = mod((long long int)ff * fact[c2 + y]);
          ff = mod((long long int)ff * fact[n - c1 - x - c2 - y]);
          ret = mod((long long int)ret + ff);
        }
      }
    }
  }
  result = mod((long long int)result + ret);
  return ret;
}
int main() {
  B[0] = B[1] = -1;
  fact[0] = 1;
  for (int i = 1; i < 25; i++) fact[i] = ((long long int)fact[i - 1] * i) % MOD;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> A[i];
  }
  cin >> k;
  for (int i = 0; i < k; i++) cin >> B[i];
  result = fact[n];
  if (k == 1)
    precompute(B[0]);
  else if (k == 2) {
    pc2(B[0], B[1]);
  }
  cout << result << endl;
  return 0;
}
