#include<bits/stdc++.h>
#define ll long long
const int Mod=1e9+7;
const int N=1e6+10;
ll n,p,f,cnt=0;
int t[105];
ll a[N];
ll fi[N];
int size=100;
using namespace std;
struct mx{
ll g[105][105];
mx(){
memset(g,0,sizeof(g));
}
};
mx mul(mx x,mx y){
mx res;
for(int i=1;i<=size;i++)
for(int j=1;j<=size;j++)
for(int k=1;k<=size;k++) res.g[i][j]=(res.g[i][j]+x.g[i][k]*y.g[k][j]%Mod)%Mod;
return res;
}
mx fpow(mx v,int k){
mx base=v;
mx res;
for(int i=1;i<=size;i++) res.g[i][i]=1;
while(k){
if(k&1) res=mul(res,base);
base=mul(base,base);
k=k>>1;
}
return res;
}
void pr(mx a)
{
cout<<"pr"<<endl;
for(int i=1;i<=size;i++)
{
for(int j=1;j<=size;j++)
{
cout<<a.g[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
signed main(){
scanf("%lld",&n);
scanf("%lld",&p);
int tmp;
for(int i=1;i<=p;i++) scanf("%d",&tmp),t[tmp]++;
scanf("%lld",&f);
for(int i=1;i<=f;i++)
{
scanf("%d",&tmp);
if (t[tmp] == 1)
{
t[tmp] ++;
a[++cnt] = tmp;
}
}
sort(a + 1,a + cnt + 1);
fi[0]=1;
if(n<=1e6){
for(int i=1;i<=n;i++){
for(int j=1;j<=cnt;j++){
fi[i]=(fi[i]+fi[i-a[j]])%Mod;
}
}
cout<<fi[n];
return 0;
}
mx base;
for(int i=1;i<=cnt;i++) base.g[1][a[i]]=1;
for(int i=2;i<=size;i++) base.g[i][i-1]=1;
base=fpow(base,n);
cout<<base.g[1][1];
return 0;
}