#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+10,M=2e5+10,INF=1e9;
int n;
double m;
int h[N],e[M],ne[M],w[N],rm[M],idx;
int f1[N][2],f2[N][2];
bool st[N],ins[N];
double ans;
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs_f(int u,int ap,int f[][2],int from){
f[u][1]=(u==ap?-INF:w[u]);
for(int i=h[u];~i;i=ne[i]){
if(rm[i]||i==(from^1)) continue;
int j=e[i];
dfs_f(j,ap,f,i);
f[u][0]+=max(f[j][0],f[j][1]);
f[u][1]+=f[j][0];
}
}
void dfs_c(int u,int from){
st[u]=ins[u]=true;
for(int i=h[u];~i;i=ne[i]){
if(i==(from^1)) continue;
int j=e[i];
if(!st[j]) dfs_c(j,i);
else if(ins[j]){
rm[i]=rm[i^1]=1;
dfs_f(j,-1,f1,-1);
dfs_f(j,u,f2,-1);
ans+=max(max(f1[j][0],f1[j][1]),f2[j][1])*m;
}
}
ins[u]=false;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&w[i]);
memset(h,-1,sizeof h);
for(int i=0;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
add(a,b),add(b,a);
}
scanf("%lf",&m);
dfs_c(1,-1);
printf("%.1lf",ans);
return 0;
}