#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ck=0;
char fu=1;
char c;
for(;!isdigit(c);c=getchar())
if(c=='-')
fu=-1;
for(;isdigit(c);c=getchar())
ck=ck*10+c-'0';
return ck*fu;
}
const int _MAX=0x3f3f3f3f;
const int N=1e4+5;
#define mode 10007
vector <int> edg[N];
void add(int x,int y){
edg[x].push_back(y);
}
int p[N];
int n,anshe=0,ans=-199;
int main(){
//ios::sync_with_stdio(false);//加快cin ,加了这个之后不能混用
cin>>n;
int x,y;
for(int i=1;i<n;i++){
cin>>x>>y;
add(x,y);
}
for(int i=1;i<=n;i++) cin>>p[i];
for(int k=1;k<=n;k++){
for(int i=0;i<edg[k].size();i++){
for(int j=0;j<edg[k].size();j++){
if(i==j)
continue;
anshe=((p[edg[k][i]]*p[edg[k][j]])%mode+anshe)%mode;
ans=max(p[edg[k][i]]*p[edg[k][j]],ans);
}
}
}
cout<<ans<<" "<<anshe<<endl;
return 0;
}