#include<iostream>
#define maxn 200010
#define int long long
using namespace std;
struct E{
int to,nxt;
}e[maxn*2];
int head[maxn],cnt;
void add(int a,int b){
e[++cnt].to=b;
e[cnt].nxt=head[a];
head[a]=cnt;
}
int mx=-99999;
int mx1,mx2;
int dis[maxn],n;
int sum1,sum2,ans;
signed main(){
cin>>n;
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
for(int i=1;i<=n;i++)cin>>dis[i];
for(int i=1;i<=n;i++){
sum1=sum2=0;
for(int j=head[i];j;j=e[j].nxt){
int v=e[j].to;
if(dis[v]>mx1){
mx2=mx1;
mx1=dis[v];
}else if(dis[v]>mx2){
mx2=dis[v];
}
int t=(dis[v]*dis[v])%10007;
sum1=(sum1+dis[v])%10007;
sum2=(sum2+t)%10007;
}
if(mx1*mx2>mx)mx=mx1*mx2;
sum1=(sum1*sum1)%10007;
ans=(ans+sum1-sum2)%10007;
mx1=mx2=0;
}
cout<<mx<<" "<<ans%10007;
return 0;
}