read_line.to_i.times do puts solve() ? "Yes" : "No" end def solve n, m, k = read_line.split.map(&.to_i) g = Array.new(n) { [] of Int32 } m.times do u, v = read_line.split.map { |v| v.to_i - 1 } g[u] << v g[v] << u end b = read_line.split.map(&.to_i) g2 = Array.new(n) { [] of Int32 } visited = Array.new(n, false) visited[0] = true parent = Array.new(n, -1) q = [0] qi = 0 while qi < n cur = q[qi] qi += 1 g[cur].each do |adj| next if visited[adj] g2[cur] << adj g2[adj] << cur parent[adj] = cur visited[adj] = true q << adj end end qi = n - 1 while qi > 0 cur = q[qi] qi -= 1 b[parent[cur]] += k - b[cur] b[parent[cur]] %= k b[cur] = 0 end b.all? { |v| v == 0 } end