#include<bits/stdc++.h>
#define int long long
using namespace std;
int fa[100001],n,a[100001],s,t;
double f[100001][2];
struct edge{
int v,next;
} e[200002];
int h[100001],cnt=0;
void addedge(int u,int v){
e[++cnt].v=v;
e[cnt].next=h[u];
h[u]=cnt;
return;
}
int find(int x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
int dfs(int u,int fa){
f[u][1]=a[u];
f[u][0]=0;
for(int i=h[u];i;i=e[i].next){
int v=e[i].v;
if(v=fa) continue;
dfs(v,u);
f[u][0]+=max(f[v][1],f[v][0]);
f[u][1]+=f[v][0];
}
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
fa[i]=i;
}
for(int i=1;i<=n;i++){
int u,v;
cin>>u>>v;
addedge(u,v);
addedge(v,u);
if(find(u)==find(v)){
s=u,t=v;
continue;
}
fa[find(u)]=find(v);
}
double k,ans=0;
cin>>k;
dfs(s,0);
ans=f[s][0];
dfs(t,0);
ans=max(ans,double(f[t][0]));
cout<<ans*k;
return 0;
}