#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+50;
const int mod=1e9+7;
int t;
int n,m,w,d;
int a[N],b[N],c[N],ci[N];
int f[N],cnt,kmp[N],sum[N],res,W,ans;
int fct[N],inv[N],finv[N];
int C(int x,int y){
return x>=y&&y>=0?fct[x]*finv[x-y]%mod*finv[y]%mod:0;
}
signed main(){
fct[0]=inv[0]=finv[0]=fct[1]=inv[1]=finv[1]=1;
for(int i=2;i<=1e6;i++){
fct[i]=fct[i-1]*i%mod;
inv[i]=(mod-mod/i*inv[mod%i]%mod)%mod;
finv[N]=finv[i-1]*inv[i]%mod;
}
cin>>t;
while(t--){
res=cnt=ans=0;
for(int i=1;i<=1e6+2;i++)a[i]=b[i]=c[i]=ci[i]=f[i]=kmp[i]=sum[i]=0;
cin>>n>>m>>w>>d;
W=w;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)cin>>b[i],f[b[i]]=1;
for(int i=1;i<=w;i++)W-=f[i];
for(int i=1;i<=n;i++)
if(f[a[i]])c[++cnt]=a[i],ci[cnt]=i;
int j=0;
for(int i=2;i<=m;i++){
while(j&&b[i]!=b[j+1])j=kmp[j];
if(b[i]==b[j+1])j++;
kmp[i]=j;
}
j=0;
int l=0,r=0;
for(int i=1;i<=cnt;i++){
while(j&&c[i]!=b[j+1])j=kmp[j];
if(c[i]==b[j+1])j++;
if(j==m){
int s=ci[i-j+1]-1,e=ci[i];
while(r<e){
++r;
if(!f[a[r]]){
sum[a[r]]++;
if(sum[a[r]]==1)res++;
}
}
while(l<s){
++l;
if(!f[a[l]]){
sum[a[l]]--;
if(sum[a[l]]==0)res--;
}
}
ans=(ans+C(W-res,d-res))%mod;
}
}
cout<<ans<<"\n";
}
return 0;
}