//01背包问题
#include
#include
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]);
}
}
}