#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int maxi = INT_MIN;
void dfs(vector<bool>&vis,vector<vector<int>>&adjlist,int curr,vector<int>&sum,vector<int>&val){
vis[curr]=true;
for(int adj : adjlist[curr]){
if(!vis[adj]){
dfs(vis,adjlist,adj,sum,val);
sum[curr]+=sum[adj];
}
}
sum[curr]+=val[curr];
maxi = max(maxi,sum[curr]);
}
int main() {
int n ; int m ;
cin>>n>>m;
vector<vector<int>>adjlist(n+1);
vector<bool>vis(n+1,false);
vector<int>val(n+1,0);
vector<int>sum(n+1,0);
for(int i = 0 ; i<m;i++){
int u ; int v ;
cin>>u>>v;
adjlist[u].push_back(v);
adjlist[v].push_back(u);
}
for(int i = 1 ; i<=n ; i++) cin>>val[i];;
dfs(vis,adjlist,1,sum,val);
cout<<maxi;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1heGkgPSBJTlRfTUlOOwp2b2lkIGRmcyh2ZWN0b3I8Ym9vbD4mdmlzLHZlY3Rvcjx2ZWN0b3I8aW50Pj4mYWRqbGlzdCxpbnQgY3Vycix2ZWN0b3I8aW50PiZzdW0sdmVjdG9yPGludD4mdmFsKXsKCXZpc1tjdXJyXT10cnVlOwoJCglmb3IoaW50IGFkaiA6IGFkamxpc3RbY3Vycl0pewoJCWlmKCF2aXNbYWRqXSl7CgkJCQoJCQlkZnModmlzLGFkamxpc3QsYWRqLHN1bSx2YWwpOwoJCQlzdW1bY3Vycl0rPXN1bVthZGpdOwoJCQkKCQl9Cgl9CglzdW1bY3Vycl0rPXZhbFtjdXJyXTsKCW1heGkgPSBtYXgobWF4aSxzdW1bY3Vycl0pOwoKfQppbnQgbWFpbigpIHsKICAgIGludCBuIDsgaW50IG0gOyAKICAgIGNpbj4+bj4+bTsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj5hZGpsaXN0KG4rMSk7CiAgICB2ZWN0b3I8Ym9vbD52aXMobisxLGZhbHNlKTsKICAgIHZlY3RvcjxpbnQ+dmFsKG4rMSwwKTsKICAgIHZlY3RvcjxpbnQ+c3VtKG4rMSwwKTsKICAgIAogICAgZm9yKGludCBpID0gMCA7IGk8bTtpKyspewogICAgCWludCB1IDsgaW50IHYgOyAKICAgIAljaW4+PnU+PnY7CiAgICAJYWRqbGlzdFt1XS5wdXNoX2JhY2sodik7CiAgICAJYWRqbGlzdFt2XS5wdXNoX2JhY2sodSk7CiAgICB9CiAgICBmb3IoaW50IGkgPSAxIDsgaTw9biA7IGkrKykgY2luPj52YWxbaV07OwogICAgZGZzKHZpcyxhZGpsaXN0LDEsc3VtLHZhbCk7CiAgICBjb3V0PDxtYXhpOwoJcmV0dXJuIDA7Cn0=