#include<bits/stdc++.h>
using namespace std;
#define debug(n,m) cout<<"["<<#n<<"]->"<<n<<m
#define int long long
#define all(x,off) x.begin()+off,x.end()
#define pb push_back
const int N=1e6+10;
const int inf=9e17;
const int mod=1e9+7;
vector<int> g[11];
vector<int>tr[11];
int we[11][11];
int cur[11][11];
int p[11];
int n,m,k;
int l,r;
int dfs(int u,int par) {
int tot=0;
for (int v : tr[u]) {
if (v==par) continue;
cur[u][v]=cur[v][u]=dfs(v,u);
tot+=cur[u][v];
}
return tot+p[u];
}
int solve_sub1(int k) {
we[l][r]=k;
vector<int> d(n+1,inf);
vector<int> vis(n+1,0);
vector<int> d2(n+1,inf);
vector<int> vis2(n+1,0);
vector<int> bes(n+1,0);
d[1]=0;
d2[l]=0;
d2[r]=k;
int tot=0;
int tit=0;
bes[r]=l;
for (int i=1;i<=n;++i) {
int v=-1;
int u=-1;
for (int j=1;j<=n;++j) {
if (!vis[j]&&(v==-1||d[j]<d[v])) v=j;
if (!vis2[j]&&(u==-1||d2[j]<d2[u])) u=j;
}
// assert(v!=-1);
// assert(u!=-1);
vis[v]=1;
tot+=d[v];
for (int el : g[v]) {
if (vis[el]) continue;
int w=we[v][el];
if (w<d[el]) {
d[el]=w;
}
}
if (u==-1) continue;
tit+=d2[u];
vis2[u]=1;
if (u!=l){
tr[u].pb(bes[u]);
tr[bes[u]].pb(u);
}
for (int el : g[u]) {
if (vis2[el]) continue;
if (el==r) continue;
int w=we[u][el];
if (w<d2[el]) {
d2[el]=w;
bes[el]=u;
}
}
}
if (tot!=tit) return 0;
dfs(1,0);
return cur[l][r]*k;
}
void levi() {
cin>>n>>m>>k;
for (int i=1;i<=m;++i) {
int u,v,w;
cin>>u>>v>>w;
g[u].pb(v);
g[v].pb(u);
we[v][u]=we[u][v]=w;
}
cin>>l>>r;
for (int i=1;i<=n;++i) cin>>p[i];
g[l].pb(r);
g[r].pb(l);
int res=0;
for (int i=1;i<=(int)1e6;++i) {
for (int i=1;i<=n;++i) tr[i].clear();
res=max(res,solve_sub1(i));
}
cout<<res<<'\n';
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);int tt=1;//cin>>tt;
while (tt--) levi();
}
/*
*/