#include<cstdio>
#include<iostream>
#include<stdlib.h>
#include<ctype.h>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<iomanip>
#include<set>
#include<string>
#include<iterator>
using namespace std;
int w[1100];
int v[1100];
int dp[1100];
int main(){
int N,V;
int T;
cin>>T;
while(T--){
cin>>N>>V;
for(int i=0;i<N;i++)
cin>>v[i];
for(int i=0;i<N;i++)
cin>>w[i];
memset(dp,0,sizeof(dp));
for(int i=0;i<N;i++)
for(int j=V;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
cout<<dp[V]<<endl;
}
}
#include<iostream>
#include<stdlib.h>
#include<ctype.h>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<iomanip>
#include<set>
#include<string>
#include<iterator>
using namespace std;
int w[1100];
int v[1100];
int dp[1100];
int main(){
int N,V;
int T;
cin>>T;
while(T--){
cin>>N>>V;
for(int i=0;i<N;i++)
cin>>v[i];
for(int i=0;i<N;i++)
cin>>w[i];
memset(dp,0,sizeof(dp));
for(int i=0;i<N;i++)
for(int j=V;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
cout<<dp[V]<<endl;
}
}