#include #define rep(i, n) for (ll i = 0; i < (n); i++) using namespace std; using ll = long long; using vi = vector; using vl = vector; #define all(x) (x).begin(), (x).end() // int randint(int a, int b) { // assert(a < b); // long long seed = // chrono::high_resolution_clock::now().time_since_epoch().count(); // mt19937_64 rng(seed); // uniform_int_distribution d(a, b - 1); // return d(rng); // } void solve() { int N, K; cin >> N >> K; vector> G(N); rep(i, N - 1) { int u, v; cin >> u >> v; u--, v--; G[u].push_back(v); G[v].push_back(u); } vi B(N); rep(i, N) { cin >> B[i]; } vi dist(N); vector visited(N); auto dfs = [&](auto dfs, int v, int d) -> void { visited[v] = true; dist[v] = d; for (int to : G[v]) { if (!visited[to]) { dfs(dfs, to, d + 1); } } }; dfs(dfs, 0, 0); ll sum1 = 0, sum2 = 0; rep(i, N) { if (dist[i] % 2 == 0) { sum1 += B[i]; } else { sum2 += B[i]; } } if (sum1 % K == sum2 % K) { cout << "Yes" << endl; } else { cout << "No" << endl; } } int main() { int T; cin >> T; rep(i, T) { solve(); } }