Coins
// https://codeforces.com/gym/101102/problem/A
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int N =15000;
const int mod=1e9+7;
const int cold = 200;
const int rowd = 16000;
int a[cold],b[cold];
ll dp[cold][rowd],nyan[cold][rowd];
ll ans;
int i, j;
int T,n,m,k,w;
int main() {
scanf("%d",&T);
while(T--){
memset(dp,0,sizeof(dp));
memset(nyan,0,sizeof(nyan));
scanf("%d%d%d%d",&n,&m,&k,&w);
for(i=0; i<n; i++)
scanf("%d",&a[i]);
for(i=0; i<m; i++)
scanf("%d",&b[i]);
dp[0][a[0]]=1;
dp[0][0]=1;
for(i=1;i<n;i++){
for(j=0;j<=N;j++){
dp[i][j]+=dp[i-1][j];
if(j-a[i]>=0) dp[i][j]=(dp[i][j]+dp[i-1][j-a[i]])%mod;
}
}
nyan[0][b[0]]=1;
nyan[0][0]=1;
for(i=1; i<m; i++){
for(j=0; j<=N; j++){
nyan[i][j]+=nyan[i-1][j];
if(j-b[i]>=0) nyan[i][j]=(nyan[i][j]+nyan[i-1][j-b[i]])%mod;
}
}
ans=0;
for(i=0; i<=w; i++)
if(abs(w-i-i)<=k) ans=(ans+dp[n-1][i]*nyan[m-1][w-i])%mod;
printf("%I64d\n",ans);
}
return 0;
}
Last updated