#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 200010 , M = N * 2 , mod = 10007;
int h[M] , e[M] , ne[M] , idx;
bool st[N];
int n;
LL maxnum , sum , w[M];
void add(int a , int b)
{
e[idx] = b , ne[idx] = h[a] , h[a] = idx ++ ;
}
void dfs(int u , LL from)
{
st[1] = true;
LL sum2 = from % mod , sum3 = (from * from) % mod;
for (int i = h[u] ; ~i ; i = ne[i])
{
int j = e[i];
if (st[j]) continue;
st[j] = true;
sum2 = (sum2 + w[j]) % mod , sum3 = (sum3 + w[j] * w[j]) % mod;
dfs(j , w[u]);
maxnum = max(maxnum , (LL)w[j] * from);
from = max(from , w[j]);
}
sum = ((LL)(sum2 * sum2) % mod - sum3 + sum) % mod;
}
int main()
{
//freopen("link.in" , "r" , stdin);
//freopen("link.out" , "w" , stdout);
scanf("%d" , &n);
memset(h , -1 , sizeof h);
memset(st , false , sizeof st);
for (int i = 1 ; i <= n - 1 ; i ++ )
{
int a , b;
scanf("%d%d" , &a , &b);
add(a , b) , add(b , a);
}
for (int i = 1 ; i <= n ; i ++ )
scanf("%lld" , &w[i]);
dfs(1 , 0);
sum %= mod;
printf("%lld %lld\n" , maxnum , sum);
return 0;
}