//01背包問題
#include<stdio.h>
#include<string.h>
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
void main()
{
int dp[1005];//記錄下V的背包空間可以獲得的最大價值量
int val[1005];
int bone[1005];
int T;
int N,V;
int i,j;
while(scanf("%d",&T)!=EOF)
{
while(T--)
{
scanf("%d%d",&N,&V);
for(i=1;i<=N;i++)
scanf("%d",&val[i]);
for(i=1;i<=N;i++)
scanf("%d",&bone[i]);
memset(dp,0,sizeof(dp));
for(i=1;i<=N;i++)
for(j=V;j>=0;j--)
if(j>=bone[i])
dp[j]=max(dp[j],dp[j-bone[i]]+val[i]);
printf("%d\n",dp[V]);
}
}
}