#include<stdio.h>
#include<string.h>
#define M 1010
int a[M],b[M],n,v;
int f[M];
int max(int x,int y)
{
if(x<y)
return y;
else
return x;
}
void pack(int cost,int weight)
{
int i;
for(i=v;i>=cost;i--)
{
f[i]=max(f[i],f[i-cost]+weight);
}
}
int main()
{
int t;
int i,j,sum;
scanf("%d",&t);
while(t-- && scanf("%d%d",&n,&v))
{
memset(f,0,sizeof(f));
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
for(i=0;i<n;i++)
pack(b[i],a[i]);
printf("%d\n",f[v]);
}
return 0;
}