#include <stdio.h>
#include <algorithm>
using namespace std;
int c[1005],w[1005],f[1005];
int n,v;
void ZeroOnePack ()
{
int i,j;
memset(f,0,sizeof(f));
for (i=1;i<=n;i++) // n是物体的件数
for (j=v;j>=c[i];j--) // c[i],是这件物体的体积
// 切记这里是从体积最大开始,不然等会小的被更新了,大的体积会受影响
f[j]=max(f[j-c[i]]+w[i],f[j]);
}
int main ()
{
int i,T;
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&v);
for (i=1;i<=n;i++)
scanf("%d",&w[i]);
for (i=1;i<=n;i++)
scanf("%d",&c[i]);
ZeroOnePack ();
printf("%d\n",f[v]);
}
return 0;
}