#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#define MAX 1005
using namespace std;
int dp[MAX][MAX];
struct bone{
int volume;
int value;
}s[MAX];
int main()
{
int t;
cin>>t;
while(t--){
int n,v;
cin>>n>>v; //骨头数 背包体积
for(int i=1;i<=n;i++){ //输入每块骨头价值
cin>>s[i].value;
}
for(int i=1;i<=n;i++){ //输入每块骨头体积
cin>>s[i].volume;
}
memset(dp,0,sizeof(dp));
// i 代表骨头; j 代表背包容量(剩余容量)
for(int i=1;i<=n;i++){
for(int j=0;j<=v;j++){
if(j<s[i].volume){ //递归出口, 装不下的时候
dp[i][j]=dp[i-1][j];
}
else{ //状态方程
dp[i][j]=max(dp[i-1][j],dp[i-1][j-s[i].volume]+s[i].value);
}
}
}
cout<<dp[n][v]<<endl; //输出最大价值
}
return 0;
}