#include<cstdio>
#include<cstring>
#include<algorithm>
const int maxn = 1005;
int dp[maxn];
struct Bone
{
int w,v;
}bone[maxn];
using namespace std;
int main()
{
int N,num,V,i,j;
scanf("%d",&N);
while(N--)
{
memset(dp,0,sizeof(dp));
scanf("%d%d",&num,&V);
for(i = 1; i <= num; i++)
scanf("%d",&bone[i].w);
for(i = 1; i <= num; i++)
scanf("%d",&bone[i].v);
for(i = 1; i <= num; i++)//01背包
for(j = V; j>=bone[i].v; j--)//j小于bone[i].v循环终止;
dp[j]=max(dp[j],dp[j-bone[i].v]+bone[i].w);
printf("%d\n",dp[V]);
}
return 0;
}
#include<cstring>
#include<algorithm>
const int maxn = 1005;
int dp[maxn];
struct Bone
{
int w,v;
}bone[maxn];
using namespace std;
int main()
{
int N,num,V,i,j;
scanf("%d",&N);
while(N--)
{
memset(dp,0,sizeof(dp));
scanf("%d%d",&num,&V);
for(i = 1; i <= num; i++)
scanf("%d",&bone[i].w);
for(i = 1; i <= num; i++)
scanf("%d",&bone[i].v);
for(i = 1; i <= num; i++)//01背包
for(j = V; j>=bone[i].v; j--)//j小于bone[i].v循环终止;
dp[j]=max(dp[j],dp[j-bone[i].v]+bone[i].w);
printf("%d\n",dp[V]);
}
return 0;
}