#include <bits/stdc++.h>
using namespace std;
const int MN = 3030;
long long w[MN];
vector<pair<long long, long long> > dp[MN];
vector<pair<long long, long long> > tem;
vector<vector<int> > g;
int ds(int u, int p) {
  pair<long long, long long> res = make_pair(0, 0);
  int sz = 1;
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v == p) {
      continue;
    }
    sz += ds(v, u);
  }
  dp[u].assign(1, make_pair(0, w[u]));
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v == p) {
      continue;
    }
    tem.assign(dp[u].size() + dp[v].size(), make_pair(-999999, 0));
    for (int j = 0; j < dp[v].size(); j++) {
      for (int k = 0; k < dp[u].size(); k++) {
        pair<long long, long long> va = make_pair(
            dp[u][k].first + dp[v][j].first, dp[u][k].second + dp[v][j].second);
        pair<long long, long long> vb = make_pair(
            va.first + ((dp[v][j].second > 0) ? 1 : 0), dp[u][k].second);
        tem[k + j] = max(tem[k + j], va);
        tem[k + j + 1] = max(tem[k + j + 1], vb);
      }
    }
    dp[u] = tem;
  }
  return sz;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int N;
  cin >> N;
  while (N--) {
    int n, m;
    cin >> n >> m;
    g.assign(n, vector<int>());
    for (int i = 0; i < n; i++) {
      cin >> w[i];
      w[i] *= -1;
    }
    for (int i = 0; i < n; i++) {
      long long t;
      cin >> t;
      w[i] += t;
    }
    for (int i = 0; i < n - 1; i++) {
      int a, b;
      cin >> a >> b;
      a--;
      b--;
      g[a].push_back(b);
      g[b].push_back(a);
    }
    ds(0, 0);
    pair<long long, long long> res = dp[0][m - 1];
    if (res.second > 0) {
      res.first++;
    }
    cout << res.first << '\n';
  }
}
