Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define D(x) cout<<#x " = "<<(x)<<endl
- #define un(x) x.erase(unique(x.begin(),x.end()), x.end())
- #define sf(n) scanf("%d", &n)
- #define sff(a,b) scanf("%d %d", &a, &b)
- #define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
- #define pb push_back
- #define mp make_pair
- #define xx first
- #define yy second
- #define hp (LL) 999983
- #define MAX 150
- #define eps 1e-9
- #define pi acos(-1.00)
- #define MOD 1000000007
- typedef long long int LL;
- typedef pair<int,int> pii;
- int coin1[MAX+5];
- int coin2[MAX+5];
- const int lim = 15000;
- int dp1[lim+5];
- int dp2[lim+5];
- int main()
- {
- //freopen("in.txt", "r", stdin);
- int i, j, k;
- int p1, p2;
- int t, cs;
- int n, m, w;
- LL res;
- sf(t);
- while(t--)
- {
- sff(n, m);
- sff(k, w);
- memset(dp1, 0, sizeof(dp1));
- memset(dp2, 0 ,sizeof(dp2));
- res = 0;
- for(i = 1; i <= n; i++) sf(coin1[i]);
- for(j = 1; j <= m; j++) sf(coin2[i]);
- dp1[0] = dp2[0] = 1;
- for(int idx = 1; idx <= n; idx++)
- for(int val = lim; val >= 0; val--)
- if(dp1[val] && val + coin1[idx] <= lim)
- dp1[val + coin1[idx]] = (dp1[val + coin1[idx]] + dp1[val]) % MOD;
- for(int idx = 1; idx <= m; idx++)
- for(int val = lim; val >= 0; val--)
- if(dp2[val] && val + coin2[idx] <= lim)
- dp2[val + coin2[idx]] = (dp2[val + coin2[idx]] + dp2[val]) % MOD;
- for(i = 0; i <= w; i++)
- res = ( res + (LL) dp1[i] * dp2[w-i]) % MOD;
- printf("%lld\n", res);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement