#include<bits/stdc++.h>
using namespace std;
const int N=5e2+10,M=4e3+10;
int n,m,c[N],w[N],d[N],s[N][M],k[N],dp[N][M],head[N],tot,T,ans;
struct qp{
int to,ne;
}e[N<<1];
void add(int u,int v){
e[++tot]={v,head[u]};
head[u]=tot;
}
void init(){
memset(k,0,sizeof k);
memset(dp,0,sizeof dp);
memset(head,0,sizeof head);
tot=ans=0;
}
void dfs(int u,int fa){
for(int i=1;i<=d[u] && i*c[i]<=m;i++){
dp[u][i*c[u]]=w[u]*i;
ans=max(ans,dp[u][i*c[u]]);
s[u][++k[u]]=i*c[i];
}
for(int i=head[u];i;i=e[i].ne){
int v=e[i].to;
if(v==fa) continue;
dfs(v,u);
int nk=k[u];
for(int j=k[u];j;j--)
for(int q=1;q<=k[v] && s[u][j]+s[v][q]<=m;q++){
if(!dp[u][s[u][j]+s[v][q]]) s[u][++nk]=s[u][j]+s[v][q];
dp[u][s[u][j]+s[v][q]]=max(dp[u][s[u][j]+s[v][q]],dp[u][s[u][j]]+dp[v][s[v][q]]);
ans=max(ans,dp[u][s[u][j]+s[v][q]]);
}
k[u]=nk;
sort(s[u]+1,s[u]+1+k[u]);
}
}
int main(){
cin>>T;
while(T--){
init();
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1;i<=n;i++) cin>>d[i];
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
dfs(1,0);
cout<<ans<<endl;
}
return 0;
}