#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
vector<int>e[N];
int w[N];
int n;
int ans = 0;
int maxx = 0;
void dfs(int u, int fa) {
int sum = 0;
int m1 = 0, m2 = 0;
for (auto v : e[u]) {
if (v == fa)continue;
if (w[v] > m1) {
m2 = m1;
m1 = w[v];
}
ans += (sum * w[v] * 2);
sum += w[v];
ans += w[fa] * w[v] * 2;
dfs(v, u);
maxx = max(maxx,max(m1*m2,m1*w[fa]));
}
return ;
}
signed main() {
cin >> n;
int u, v;
for (int i = 1; i < n; i++) {
cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
for (int i = 1; i <= n; i++)cin >> w[i];
dfs(1, 0);
cout <<maxx <<" "<< (ans+10007)%10007 << "\n";
return 0;
}