sub0全过sub1全t
#include<bits/stdc++.h>
using namespace std;
int p[100010],father[100010];
bool b[100010]={0};
vector<int> a[100010];
double f[100010][2],k,ans,g[100010][2];
int read(){
int x=0,w=1;
int ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*w;
}
void dfs(int x,int fa){
b[x]=1;
f[x][0]=0,f[x][1]=p[x];
for(int i=0;i<a[x].size();++i){
if(b[a[x][i]]==1) continue;
dfs(a[x][i],x);
f[x][0]+=max(f[a[x][i]][0],f[a[x][i]][1]);
f[x][1]+=f[a[x][i]][0];
}
}
void dfs2(int x,int fa){
b[x]=1;
g[x][0]=0,g[x][1]=p[x];
for(int i=0;i<a[x].size();++i){
if(b[a[x][i]]==1) continue;
dfs2(a[x][i],x);
g[x][0]+=max(g[a[x][i]][0],g[a[x][i]][1]);
g[x][1]+=g[a[x][i]][0];
}
}
int find(int x){
return father[x]==x?x:x=find(father[x]);
}
int main(){
int n;
n=read();
for(int i=0;i<n;++i){
p[i]=read();
father[i]=i;
}
int S,T;
for(int i=0;i<n;++i){
int u,v;
u=read(),v=read();
if(find(u)==find(v)){
S=u;T=v;
continue;
}
a[u].push_back(v);
a[v].push_back(u);
father[find(v)]=find(u);
}
cin>>k;
dfs(S,-1);
memset(b,0,sizeof(b));
dfs2(T,-1);ans=max(f[S][0],g[T][0]);
printf("%.1lf\n",ans*k);
return 0;
}