记录
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int MOD = 1e9 + 7;
int n, m, a[25];
ll dp[17000000], s[17000000];
bool f[17000000];
unordered_map<int, bool> mp;
int main(){
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
cin >> m;
while(m--){
int x;
cin >> x;
mp[x] = 1;
}
int mx = (1 << n) - 1;
dp[0] = 1;
for(int i = 1; i <= mx; i++){
for(int j = 1; j <= n; j++){
if((1 << (j - 1)) & i){
s[i] = s[i ^ (1 << (j - 1))] + a[j];
if(mp[s[i]]) f[s[i]] = 1;
if(f[s[i ^ (1 << (j - 1))]]) continue;
dp[i] += dp[i ^ (1 << (j - 1))];
if(dp[i] >= MOD) dp[i] -= MOD;
}
}
}
cout << dp[mx];
return 0;
}