#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define N 25
int n, m, a[N], b[N], dis[1<<N], dp[1<<N];
#define lowbit(x) x&(-x)
bool work(int x)
{
for(int i=1;i<3;i++)
{
if(b[i]==x)return 1;
}
return 0;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i-1];
dis[1<<(i-1)]=a[i-1];
}
cin>>m;
for(int i=1;i<=m;i++)cin>>b[i];
dp[0]=1;
for(int i=1;i<(1<<n);i++)
{
int x=lowbit(i);
dis[i]=dis[x]+dis[x^i];
if(work(dis[i]))continue;
int y;
for(int k=i;k;k-=y)
{
y=lowbit(k);
dp[i]=(dp[i]+dp[i^k])%mod;
}
}
cout<<dp[(1<<n)-1];
}
感觉写法没问题,但样例都没过