https://nanti.jisuanke.com/t/A1837
#include<bits/stdc++.h>
using namespace std;
#define IO ios::sync_with_stdio(false)
#define ll long long
#define mp make_pair
#define fi first
#define se second
#define pb push_back
#define pii pair<int,int>
#define all(n) (n).begin(),(n).end()
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define QAQ sort(co+1,co+1+n)
const int maxn=1e5+5;
struct node
{
ll v;
ll len;
};
struct nodee{
ll u;
ll cnt; //剩余次数
};
vector<node> g[maxn];
vector<nodee> vec;//二分用vec比较
int vis[maxn];
ll n,m,c,d,e,u,v,len;
bool bfs(int mid){
ll dd=mid*d;
memset(vis,0,sizeof vis);
queue<nodee> que;
vis[1]=1;
que.push({1,mid*e});
while(!que.empty()){
nodee a=que.front();
que.pop();
ll num=a.cnt;
ll v=a.u;
if(v==n)
return true;
for(int i=0;i<g[v].size();i++){
node b=g[v][i];
ll dis=b.len;
ll u=b.v;
if(!vis[u] && dis<=dd && num>0){
vis[u]=1;
que.push({u,num-1});
}
}
}
return false;
}
int main()
{
cin>>n>>m;
cin>>c>>d>>e;
while(m--){
cin>>u>>v>>len;
g[u].pb({v,len});
g[v].pb({u,len});
}
ll l=1,r=maxn,mid=0,ans=0;
while(l<=r){
mid=(l+r)>>1;
if(bfs(mid)){
ans=mid;
r=mid-1;
}
else
l=mid+1;
}
cout<<ans*c<<endl;
return 0;
}