#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);
}
}
int maxi = 0;
for (auto child : g[node]){
if(child != parent[node]){
maxi = max(maxi, val[child]);
}
}
totalSum[node] = sum + maxi;
}
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] << " ";
// }
// cout << endl;
int ans = INT_MIN;
for (int i = 1; i <= n; i++){
ans = max(ans, totalSum[i]);
}
cout << "Max-sum downwards path :" << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZlY3RvcjxpbnQ+IHRvdGFsU3VtKDFlNSs3KTsKdmVjdG9yPGludD4gdmFsKDFlNSs3KTsKCnZvaWQgREZTKGludCBub2RlLCB2ZWN0b3I8dmVjdG9yPGludD4+JiBnLCB2ZWN0b3I8aW50PiYgdmlzaXRlZCwgdmVjdG9yPGludD4mIHBhcmVudCl7CgkKCXZpc2l0ZWRbbm9kZV0gPSAxOwoJaW50IHN1bSA9IHZhbFtub2RlXTsKCWZvciAoYXV0byAmaSA6IGdbbm9kZV0pewoJCWlmKHZpc2l0ZWRbaV0gPT0gMCl7CgkJCXBhcmVudFtpXSA9IG5vZGU7CgkJCURGUyhpLCBnLCB2aXNpdGVkLCBwYXJlbnQpOwoJCX0KCX0KCQoJaW50IG1heGkgPSAwOwoJZm9yIChhdXRvIGNoaWxkIDogZ1tub2RlXSl7CgkJaWYoY2hpbGQgIT0gcGFyZW50W25vZGVdKXsKCQkJbWF4aSA9IG1heChtYXhpLCB2YWxbY2hpbGRdKTsKCQl9Cgl9CgkKCQoJdG90YWxTdW1bbm9kZV0gPSBzdW0gKyBtYXhpOwp9CgppbnQgbWFpbigpIHsKCQoJaW50IG4sZTsKCWNpbiA+PiBuID4+IGU7CgkKCXZlY3Rvcjx2ZWN0b3I8aW50Pj4gZyhuKzUpOwoJCglmb3IgKGludCBpID0gMDsgaSA8IGU7IGkrKyl7CgkJaW50IGEsIGI7CgkJY2luID4+IGEgPj4gYjsKCQlnW2FdLnB1c2hfYmFjayhiKTsKCQlnW2JdLnB1c2hfYmFjayhhKTsKCX0KCQoJaW50IHNvdXJjZTsgCiAgICBjaW4gPj4gc291cmNlOwogICAgCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgCWNpbiA+PiB2YWxbaV07CiAgICB9CgkKCXZlY3RvcjxpbnQ+IHZpc2l0ZWQobis1LCAwKTsKCXZlY3RvcjxpbnQ+IHBhcmVudChuKzUsIDApOwoJCglERlMoc291cmNlLCBnLCB2aXNpdGVkLCBwYXJlbnQpOwoJCgkvLyBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspewoJLy8gCWNvdXQgPDwgdG90YWxTdW1baV0gPDwgIiAiOwoJLy8gfQoJLy8gY291dCA8PCBlbmRsOwoJaW50IGFucyA9IElOVF9NSU47CgkKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJYW5zID0gbWF4KGFucywgdG90YWxTdW1baV0pOyAKCX0KCQoJY291dCA8PCAiTWF4LXN1bSBkb3dud2FyZHMgcGF0aCA6IiA8PCBhbnM7CglyZXR1cm4gMDsKfQ==