#include <bits/stdc++.h>
using namespace std;
#define i64 int64_t
const int N = 2001;
int n;
vector<int> g[N];
int on[N], dp[N];
void dfs(int x, int par) {
int sum = 0;
for (int u : g[x]) {
if (u == par)
continue;
dfs(u, x);
sum += dp[u];
}
if (!on[x])
dp[x] = max(sum, 0);
else {
sum -= 1;
dp[x] = max(sum, 1);
}
}
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
string s;
cin >> s;
int ans = 0;
for (int i = 1; i <= n; i++) {
on[i] = s[i - 1] - '0';
ans += on[i];
}
if (ans <= 2) {
cout << ans << '\n';
return 0;
}
memset(dp, sizeof(dp), 0);
dfs(0, -1);
ans = 0;
for (int root = 0; root < n; root++) {
memset(dp, sizeof(dp), 0);
dfs(root, -1);
ans = max(ans, dp[root]);
}
ans = max(ans, 2);
cout << ans << '\n';
return 0;
}