#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<utility>
#include<string>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
typedef unsigned long long llu;
int dp[1309][1309];
struct In{
int w,v;
}p[129];
bool cmp(In x,In y)
{
if(x.v!=y.v)
return x.v > y.v;
else return x.w < y.w;
}
int main()
{
int t;
scanf("%d",&t);
int cnt=1;
while(t--){
int n,v1,v2;
scanf("%d%d%d",&n,&v1,&v2);
for(int i=1;i<=n;i++){
scanf("%d",&p[i].w);
}
for(int i=1;i<=n;i++){
scanf("%d",&p[i].v);
}
for(int i=0;i<=v1;i++){
for(int j=0;j<=v2;j++) dp[i][j]=0;
}
sort(p+1,p+n+1,cmp);
int maxn=0;
for(int i=1;i<=n;i++){
for(int j=v1;j>=0;j--){
for(int k=v2;k>=0;k--){
if(j>=p[i].w){
if(dp[j][k]<dp[j-p[i].w][k]+p[i].v)
dp[j][k] = dp[j-p[i].w][k]+p[i].v;
}
if(k>=p[i].w){
if(dp[j][k]<dp[j][k-p[i].w]+p[i].v)
dp[j][k] = dp[j][k-p[i].w]+p[i].v;
}
}
}
}
for(int i=1;i<=v1;i++){
for(int j=1;j<=v2;j++){
if(maxn<dp[i][j]) maxn=dp[i][j];
}
}
printf("Problem %d: %d\n",cnt++,maxn);
}
}