#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[N];
vector<int> tr[N];
int p[N],cur[N];
int dis[11][11];
void dfs(int u,int p=-1) {
cur[u]=::p[u];
for (int v:tr[u]) {
if (v==p) continue;
dfs(v,u);
cur[u]+=cur[v];
}
}
int l,r;
bool isn(int u,int v){
if (u>v) swap(u,v);
return u==l&&v==r;
}
void levi() {
int n,m,k;
cin>>n>>m>>k;
for (int i=1;i<=m;++i) {
int x,y,w;
cin>>x>>y>>w;
g[x].push_back(y);
g[y].push_back(x);
dis[x][y]=dis[y][x]=w;
}
cin>>l>>r;
if (l>r) swap(l,r);
g[l].pb(r);
g[r].pb(l);
for (int i=1;i<=n;++i) {
cin>>p[i];
}
auto eval = [&](int k) -> int {
//set<array<int,2>> se;
vector<int> d(n+1,inf);
vector<int> to(n+1,0);
dis[l][r]=dis[r][l]=k;
d[l]=0;
vector<int> vis(n+1,0);
for (int i=1;i<=n;++i) {
int v=-1;
for (int j=1;j<=n;++j) {
if (!vis[j]&&(v==-1||(d[j]<d[v]))) v=j;
}
vis[v]=1;
for (int u:g[v]) {
if (vis[u]) continue;
int w=dis[u][v];
if (w<d[u]||(w==d[u]&&isn(u,v))) {
d[u]=w;
to[u]=v;
}
}
}
for (int i=2;i<=n;++i) tr[to[i]].pb(i),tr[i].pb(to[i]);
dfs(1);
//debug(cur[3],' ');
if (l==to[r]) return cur[r]*k;
if (r==to[l]) return cur[l]*k;
return 0;
};
int res=0;
for (int i=1;i<=(int)1e6;++i) {
for (int i=1;i<=n;++i) tr[i].clear();
res=max(res,eval(i));
//if (res==450 ) debug(i,' ');
}
cout<<res<<'\n';
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);int tt=1;//cin>>tt;
while (tt--) levi();
}
/*
*/