#include <bits/stdc++.h>
using namespace std;
int dp[17000007];
long long s1[100000], s2[100000];
int bit[30];
long long a[30];
int n, k;
int q[17000007], head, tail;
bool vis[17000007];
long long get(long long x) { return s1[x & 4095] + s2[x >> 12]; }
int work() {
  dp[0] = 1;
  int v;
  long long s;
  for (int i = 0; i < bit[n]; ++i) {
    s = get(i);
    if (k > 0 && s == a[n]) {
      dp[i] = 0;
      continue;
    }
    if (k > 1 && s == a[n + 1]) {
      dp[i] = 0;
      continue;
    }
    for (int j = 0; j < n; ++j) {
      if (i & bit[j]) continue;
      v = i | bit[j];
      dp[v] += dp[i];
      if (dp[v] >= 1000000007) dp[v] -= 1000000007;
    }
  }
  return dp[bit[n] - 1];
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) cin >> a[i];
  scanf("%d", &k);
  for (int i = 0; i < k; ++i) cin >> a[i + n];
  bit[0] = 1;
  for (int i = 1; i < 30; ++i) bit[i] = bit[i - 1] << 1;
  for (int i = 0; i < 4096; ++i) {
    for (int j = 0; j < 12; ++j)
      if (bit[j] & i) s1[i] += a[j], s2[i] += a[j + 12];
  }
  cout << work() << endl;
  return 0;
}
