#include <bits/stdc++.h>
#pragma optimize("TKACHENKO-GORYACHENKO")
#pragma GCC optimize("O3")
using namespace std;
const long long maxn = 3e3 + 100;
const long long inf = 1e15;
long long n, m, k;
long long A[maxn];
long long B[maxn];
long long C[maxn];
vector<pair<long long, long long> > D[maxn];
vector<long long> V[maxn];
void dfs(long long v, long long p) {
  int q, w, e;
  for (q = 0; q < V[v].size(); q++) {
    if (V[v][q] == p) {
      continue;
    }
    dfs(V[v][q], v);
  }
  D[v].resize(m + 1);
  for (q = 0; q < D[v].size(); q++) {
    D[v][q] = make_pair(-inf, -inf);
  }
  D[v][1] = make_pair((long long)0, C[v]);
  int sz = 1;
  for (q = 0; q < V[v].size(); q++) {
    if (V[v][q] == p) {
      continue;
    }
    long long v1 = V[v][q];
    vector<pair<long long, long long> > D1(m + 1);
    for (q = 0; q < D1.size(); q++) {
      D1[q] = make_pair(-inf, -inf);
    }
    for (w = 1; w < D[v].size(); w++) {
      if (D[v][w].first <= -(inf) / 10) {
        break;
      }
      for (e = 1; e < D[v1].size(); e++) {
        if (D[v1][e].first <= -inf / 10) {
          break;
        }
        pair<long long, long long> dd = make_pair(
            D[v][w].first + D[v1][e].first, D[v][w].second + D[v1][e].second);
        if (w + e - 1 <= m) {
          D1[w + e - 1] = max(D1[w + e - 1], dd);
        }
        pair<long long, long long> dd1 =
            make_pair(D[v][w].first + D[v1][e].first, D[v][w].second);
        if (D[v1][e].second > 0) {
          dd1.first++;
        }
        if (w + e <= m) {
          D1[w + e] = max(D1[w + e], dd1);
        } else {
          break;
        }
      }
    }
    D[v] = D1;
  }
}
int main() {
  long long q, w, e, a, b, c, d;
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> k;
  for (e = 0; e < k; e++) {
    cin >> n >> m;
    for (q = 0; q < n; q++) {
      cin >> A[q];
    }
    for (q = 0; q < n; q++) {
      cin >> B[q];
      D[q].clear();
      V[q].clear();
      C[q] = B[q] - A[q];
    }
    for (q = 0; q < n - 1; q++) {
      cin >> a >> b;
      a--;
      b--;
      V[a].push_back(b);
      V[b].push_back(a);
    }
    dfs(0, 0);
    if (D[0][m].second > 0) {
      D[0][m].first++;
    }
    cout << D[0][m].first << endl;
  }
  return 0;
}
