#include <bits/stdc++.h>
using namespace std;
long long n, m, tot, e[100010], nt[100010], hd[100010], f[100010][2],
    sz[100010], g[100010][2], a[100010], b[100010];
void build(long long x, long long y) {
  tot++;
  e[tot] = y;
  nt[tot] = hd[x];
  hd[x] = tot;
}
void dfs(long long x, long long fa) {
  long long i, j, k, y, now;
  sz[x] = 1;
  if (a[x] > 0)
    f[x][1] = 1;
  else
    f[x][1] = 0;
  g[x][1] = a[x];
  for (i = hd[x]; i; i = nt[i]) {
    if (e[i] == fa) continue;
    dfs(e[i], x);
    for (j = 1; j <= sz[e[i]]; j++)
      f[x][j + sz[x]] = 0, g[x][j + sz[x]] = -1e16;
    for (j = min(m, sz[x]); j >= 1; j--)
      for (k = min(m, sz[e[i]]); k >= 1; k--) {
        if (j + k <= m) {
          if (f[x][j] + f[e[i]][k] > f[x][j + k] ||
              f[x][j] + f[e[i]][k] == f[x][j + k] && g[x][j] > g[x][j + k]) {
            f[x][j + k] = f[x][j] + f[e[i]][k];
            g[x][j + k] = g[x][j];
          }
        }
        if (j + k - 1 <= m) {
          if (g[x][j] + g[e[i]][k] > 0)
            y = 1;
          else
            y = 0;
          if (g[x][j] > 0) y--;
          if (g[e[i]][k] > 0) y--;
          if (j + k - 1 == j || f[x][j] + f[e[i]][k] + y > f[x][j + k - 1] ||
              f[x][j] + f[e[i]][k] + y == f[x][j + k - 1] &&
                  g[x][j] + g[e[i]][k] > g[x][j + k]) {
            f[x][j + k - 1] = f[x][j] + f[e[i]][k] + y;
            g[x][j + k - 1] = g[x][j] + g[e[i]][k];
          }
        }
      }
    sz[x] += sz[e[i]];
  }
}
int main() {
  long long t1, i, x, y;
  scanf("%lld", &t1);
  while (t1--) {
    scanf("%lld%lld", &n, &m);
    tot = 0;
    for (i = 1; i <= n; i++) scanf("%lld", &a[i]);
    for (i = 1; i <= n; i++) {
      hd[i] = 0;
      scanf("%lld", &b[i]);
      a[i] = b[i] - a[i];
    }
    for (i = 1; i < n; i++) {
      scanf("%lld%lld", &x, &y);
      build(x, y);
      build(y, x);
    }
    dfs(1, 0);
    printf("%lld\n", f[1][m]);
  }
}
