#include <iostream>
#include<bits/stdc++.h>
using namespace std;
void dfs(vector<bool>&vis,vector<vector<int>>&adjlist,int curr,vector<int>&max_sum,vector<int>&val){
vis[curr]=true;
for(int adj : adjlist[curr]){
if(!vis[adj]){
dfs(vis,adjlist,adj,max_sum,val);
max_sum[curr]=max(max_sum[adj],max_sum[curr]);
}
}
if(max_sum[curr]==INT_MIN){
max_sum[curr]=val[curr];
}
else{
max_sum[curr]+=val[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>max_sum(n+1,INT_MIN);
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,max_sum,val);
cout<<max_sum[1];
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCnZvaWQgZGZzKHZlY3Rvcjxib29sPiZ2aXMsdmVjdG9yPHZlY3RvcjxpbnQ+PiZhZGpsaXN0LGludCBjdXJyLHZlY3RvcjxpbnQ+Jm1heF9zdW0sdmVjdG9yPGludD4mdmFsKXsKCXZpc1tjdXJyXT10cnVlOwoKCWZvcihpbnQgYWRqIDogYWRqbGlzdFtjdXJyXSl7CgkJaWYoIXZpc1thZGpdKXsKCQkJZGZzKHZpcyxhZGpsaXN0LGFkaixtYXhfc3VtLHZhbCk7CgkJICAgIG1heF9zdW1bY3Vycl09bWF4KG1heF9zdW1bYWRqXSxtYXhfc3VtW2N1cnJdKTsKCQl9Cgl9CglpZihtYXhfc3VtW2N1cnJdPT1JTlRfTUlOKXsKCQkJbWF4X3N1bVtjdXJyXT12YWxbY3Vycl07CgkJCX0KCWVsc2V7CgkJbWF4X3N1bVtjdXJyXSs9dmFsW2N1cnJdOwoJfQoJCgkKCgp9CmludCBtYWluKCkgewogICAgaW50IG4gOyBpbnQgbSA7IAogICAgY2luPj5uPj5tOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PmFkamxpc3QobisxKTsKICAgIHZlY3Rvcjxib29sPnZpcyhuKzEsZmFsc2UpOwogICAgdmVjdG9yPGludD52YWwobisxLDApOwogICAgdmVjdG9yPGludD5tYXhfc3VtKG4rMSxJTlRfTUlOKTsKICAgIAogICAgZm9yKGludCBpID0gMCA7IGk8bTtpKyspewogICAgCWludCB1IDsgaW50IHYgOyAKICAgIAljaW4+PnU+PnY7CiAgICAJYWRqbGlzdFt1XS5wdXNoX2JhY2sodik7CiAgICAJYWRqbGlzdFt2XS5wdXNoX2JhY2sodSk7CiAgICB9CiAgICBmb3IoaW50IGkgPSAxIDsgaTw9biA7IGkrKykgY2luPj52YWxbaV07OwogICAgZGZzKHZpcyxhZGpsaXN0LDEsbWF4X3N1bSx2YWwpOwogICAgY291dDw8bWF4X3N1bVsxXTsKCXJldHVybiAwOwp9