#include<bits/stdc++.h>
using namespace std;
class matrix{
private:
int mod;
void indentity(int n){
this->n=this->m=n;
for(int i=1;i<=n;i++) a[i][i]=1;
}
public:
int n,m;
long long a[105][105];
matrix(){
mod=1e9+7;
memset(a,0,sizeof(a));
}
matrix operator*(matrix b){
matrix c;
c.n=this->n;
c.m=b.m;
for(int i=1;i<=c.n;i++)
for(int k=1;k<=100;k++)
if(this->a[i][k])
for(int j=1;j<=100;j++) c.a[i][j]=(c.a[i][j]+this->a[i][k]*b.a[k][j]%mod)%mod;
return c;
}
matrix operator^(long long x){
matrix res,a=(*this);
res.indentity(this->n);
while(x){
if(x&1) res=res*a;
a=a*a,x>>=1;
}
return res;
}
friend istream& operator>>(istream& cin,matrix& c){
cin>>c.n>>c.m;
for(int i=1;i<=c.n;i++)
for(int j=1;j<=c.m;j++) cin>>c.a[i][j];
return cin;
}
friend ostream& operator<<(ostream& cout,matrix c){
cout<<c.n<<' '<<c.m<<'\n';
for(int i=1;i<=c.n;i++){
for(int j=1;j<=c.m;j++) cout<<c.a[i][j]<<' ';
cout<<'\n';
}
return cout;
}
};
long long n,mod=1e9+7;
long long dp[105];
int pr,nf;
set<int> t,t1;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>pr;
for(int i=1;i<=pr;i++){
int x;
cin>>x;
t1.emplace(x);
}
cin>>nf;
for(int i=1;i<=nf;i++){
int x;
cin>>x;
if(t1.find(x)!=t1.end()) t.emplace(x);
}
dp[0]=1;
for(int i=1;i<=99;i++)
for(int v:t)
if(v<=i) dp[i]=(dp[i]+dp[i-v])%mod;
matrix x,y;
x.n=1,x.m=100;
for(int i=1;i<=100;i++) x.a[1][i]=dp[100-i];
y.m=100,y.n=100;
for(int v:t) y.a[v][1]=1;
for(int i=2;i<=100;i++) y.a[i-1][i]=1;
cout<<(x*(y^n)).a[1][100];
return 0;
}