#include<bits/stdc++.h>
using namespace std;
vector<int>g[200005];
const int MOD = 1e4 + 7;
int n, ans1 = 0, ans2 = 0, w[200005];
int main(){
scanf("%d", &n);
for(int i = 1; i <= n - 1; i++){
int u, v;
scanf("%d%d", &u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
for(int i = 1; i <= n; i++){
scanf("%d", &w[i]);
w[i] %= MOD;
}
for(int i = 1; i <= n; i++){
if(g[i].size() == 2){
ans1 = max(ans1, w[g[i][0]] * w[g[i][1]]);
ans2 += w[g[i][0]] * w[g[i][1]] % MOD;
ans2 %= MOD;
}
if(g[i].size() == 3){
ans1 = max({ans1, w[g[i][0]] * w[g[i][1]], w[g[i][1]] * w[g[i][2]], w[g[i][0]] * w[g[i][2]]});
ans2 += w[g[i][0]] * w[g[i][1]] % MOD;
ans2 %= MOD;
ans2 += w[g[i][2]] * w[g[i][1]] % MOD;
ans2 %= MOD;
ans2 += w[g[i][0]] * w[g[i][2]] % MOD;
ans2 %= MOD;
}
}
printf("%d %d", ans1, ans2 * 2 % MOD);
return 0;
}