#include<bits/stdc++.h>
using namespace std;
long long mod=1000000007,n,m,b[101],t,c[101];
struct matrix{
long long n=0,m=0,a[101][101]={};
matrix operator*(matrix x){
matrix ret;
if(m!=x.n){
cout<<"error";
return ret;
}
ret.n=n;
ret.m=x.m;
for(int i=1;i<=n;i++)for(int k=1;k<=m;k++)for(int j=1;j<=x.m;j++)ret.a[i][j]=(ret.a[i][j]+a[i][k]*x.a[k][j])%mod;
return ret;
}
}a;
matrix ksm(matrix a,long long b){
matrix k;
if(a.n!=a.m){
cout<<"error";
return k;
}
if(b==1)return a;
k=ksm(a,b>>1);
k=k*k;
if(b&1)k=k*a;
return k;
}
signed main(){
a.n=a.m=100;
for(int i=1;i<100;i++)a.a[i+1][i]=1;
cin>>t>>n;
for(int i=1;i<=n;i++)cin>>c[i];
cin>>m;
for(int i=1;i<=m;i++)cin>>b[i];
sort(c+1,c+n+1);
sort(b+1,b+m+1);
for(int i=1,j=1;i<=n&&j<=m;){
if(c[i]==b[j]){
a.a[101-c[i]][100]=1;
i++;
j++;
}
else if(c[i]<b[j])i++;
else j++;
}
a=ksm(a,t);
cout<<a.a[100][100];
}