use proconio::{fastout, input, marker::Usize1}; #[fastout] fn main() { input! { t: usize } for _ in 0..t { let ans = solve(); println!("{}", if ans { "Yes" } else { "No" }); } } fn solve() -> bool { input! { n: usize, m: usize, k: usize, edges: [(Usize1, Usize1); m], b: [usize; n], } let mut graph = vec![vec![]; n]; for &(u, v) in &edges { graph[u].push(v); graph[v].push(u); } let mut pre_order = vec![]; let mut parent = vec![!0; n]; let mut stack = vec![0]; while let Some(v) = stack.pop() { pre_order.push(v); graph[v].retain(|&u| u != parent[v]); for &u in &graph[v] { parent[u] = v; stack.push(u); } } let mut a = vec![0usize; n]; for &v in pre_order.iter().skip(1).rev() { let p = parent[v]; let add = (b[v] + k - a[v]) % k; a[v] = (a[v] + add) % k; a[p] = (a[p] + add) % k; } a[0] == b[0] }