#include <bits/stdc++.h>
using namespace std;
vector<int> totalSum(1e5+7);
vector<int> val(1e5+7);
void DFS(int node, vector<vector<int>>& g, vector<int>& visited, vector<int>& parent){
visited[node] = 1;
int sum = val[node];
for (auto &i : g[node]){
if(visited[i] == 0){
parent[i] = node;
DFS(i, g, visited, parent);
}
}
for (auto child : g[node]){
if(child != parent[node]){
sum += totalSum[child];
}
}
totalSum[node] = sum;
}
int main() {
int n,e;
cin >> n >> e;
vector<vector<int>> g(n+5);
for (int i = 0; i < e; i++){
int a, b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
int source;
cin >> source;
for (int i = 1; i <= n; i++){
cin >> val[i];
}
vector<int> visited(n+5, 0);
vector<int> parent(n+5, 0);
DFS(source, g, visited, parent);
for (int i = 1; i <= n; i++){
cout << totalSum[i] << " ";
}
int ans = INT_MIN;
cout << endl;
for (int i = 1; i <= n; i++){
ans = max(ans, totalSum[i]);
}
cout << "Max-sum of Subtree :" << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZlY3RvcjxpbnQ+IHRvdGFsU3VtKDFlNSs3KTsKdmVjdG9yPGludD4gdmFsKDFlNSs3KTsKCnZvaWQgREZTKGludCBub2RlLCB2ZWN0b3I8dmVjdG9yPGludD4+JiBnLCB2ZWN0b3I8aW50PiYgdmlzaXRlZCwgdmVjdG9yPGludD4mIHBhcmVudCl7CgkKCXZpc2l0ZWRbbm9kZV0gPSAxOwoJaW50IHN1bSA9IHZhbFtub2RlXTsKCWZvciAoYXV0byAmaSA6IGdbbm9kZV0pewoJCWlmKHZpc2l0ZWRbaV0gPT0gMCl7CgkJCXBhcmVudFtpXSA9IG5vZGU7CgkJCURGUyhpLCBnLCB2aXNpdGVkLCBwYXJlbnQpOwoJCX0KCX0KCQoJZm9yIChhdXRvIGNoaWxkIDogZ1tub2RlXSl7CgkJaWYoY2hpbGQgIT0gcGFyZW50W25vZGVdKXsKCQkJc3VtICs9IHRvdGFsU3VtW2NoaWxkXTsKCQl9Cgl9CgkKCXRvdGFsU3VtW25vZGVdID0gc3VtOwp9CgppbnQgbWFpbigpIHsKCQoJaW50IG4sZTsKCWNpbiA+PiBuID4+IGU7CgkKCXZlY3Rvcjx2ZWN0b3I8aW50Pj4gZyhuKzUpOwoJCglmb3IgKGludCBpID0gMDsgaSA8IGU7IGkrKyl7CgkJaW50IGEsIGI7CgkJY2luID4+IGEgPj4gYjsKCQlnW2FdLnB1c2hfYmFjayhiKTsKCQlnW2JdLnB1c2hfYmFjayhhKTsKCX0KCQoJaW50IHNvdXJjZTsgCiAgICBjaW4gPj4gc291cmNlOwogICAgCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgCWNpbiA+PiB2YWxbaV07CiAgICB9CgkKCXZlY3RvcjxpbnQ+IHZpc2l0ZWQobis1LCAwKTsKCXZlY3RvcjxpbnQ+IHBhcmVudChuKzUsIDApOwoJCglERlMoc291cmNlLCBnLCB2aXNpdGVkLCBwYXJlbnQpOwoJCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspewoJCWNvdXQgPDwgdG90YWxTdW1baV0gPDwgIiAiOwoJfQoJaW50IGFucyA9IElOVF9NSU47Cgljb3V0IDw8IGVuZGw7CgkKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJYW5zID0gbWF4KGFucywgdG90YWxTdW1baV0pOyAKCX0KCQoJY291dCA8PCAiTWF4LXN1bSBvZiBTdWJ0cmVlIDoiIDw8IGFuczsKCXJldHVybiAwOwp9