#include<bits/stdc++.h>
using namespace std;
int dp[1001][1001];
int fun(int arr[],int wt[],int n,int i,int j)
{
if(i==n)
{
if(j<0)
return -1000005;
return 0;
}
if(j<0)
return -1000005;
if(j==0)
return 0;
if(dp[i][j]!=-1)
return dp[i][j];
return dp[i][j]=max(fun(arr,wt,n,i+1,j-wt[i])+arr[i],fun(arr,wt,n,i+1,j));
}
int main() {
int t;
cin>>t;
while(t--)
{
memset(dp,-1,sizeof(dp));
int n,w;
cin>>n;
cin>>w;
int arr[n];
int wt[n];
for(int i=0;i<n;i++)
cin>>arr[i];
for(int i=0;i<n;i++)
cin>>wt[i];
int ans=fun(arr,wt,n,0,w/2);
cout<<ans<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGRwWzEwMDFdWzEwMDFdOwppbnQgZnVuKGludCBhcnJbXSxpbnQgd3RbXSxpbnQgbixpbnQgaSxpbnQgaikKewogICAgaWYoaT09bikKICAgIHsKICAgICAgICBpZihqPDApCiAgICAgICAgICAgIHJldHVybiAtMTAwMDAwNTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmKGo8MCkKICAgICAgICByZXR1cm4gLTEwMDAwMDU7CiAgICBpZihqPT0wKQogICAgICAgIHJldHVybiAwOwogICAgaWYoZHBbaV1bal0hPS0xKQogICAgICAgIHJldHVybiBkcFtpXVtqXTsKICAgIHJldHVybiBkcFtpXVtqXT1tYXgoZnVuKGFycix3dCxuLGkrMSxqLXd0W2ldKSthcnJbaV0sZnVuKGFycix3dCxuLGkrMSxqKSk7Cn0KaW50IG1haW4oKSB7CiAgICBpbnQgdDsKICAgIGNpbj4+dDsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICBtZW1zZXQoZHAsLTEsc2l6ZW9mKGRwKSk7CiAgICAgICAgaW50IG4sdzsKICAgICAgICBjaW4+Pm47CiAgICAgICAgY2luPj53OwogICAgICAgIGludCBhcnJbbl07CiAgICAgICAgaW50IHd0W25dOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAgICAgICAgIGNpbj4+YXJyW2ldOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAgICAgICAgIGNpbj4+d3RbaV07CiAgICAgICAgaW50IGFucz1mdW4oYXJyLHd0LG4sMCx3LzIpOwogICAgICAgIGNvdXQ8PGFuczw8ZW5kbDsKICAgIH0KCXJldHVybiAwOwp9