#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,pair<int,int> >
const int N = 10001,inf = 1e9;
int dis[N][12],vis[N];
vector<pair<int,int> > g[N];
int n,m,s,t,k;
priority_queue<pii,vector<pii>,greater<pii> > q;
signed main(){
cin>>n>>m>>k>>s>>t;
s++,t++;
for(int i = 1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
u++,v++;
g[u].push_back(make_pair(v,w));
g[v].push_back(make_pair(u,w));
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<=10;j++){
dis[i][j] = inf;
}
}
dis[s][0] = 0;
q.push(make_pair(0,make_pair(s,0)));
while(!q.empty()){
auto tmp = q.top();
q.pop();
int cnt = tmp.second.second,id = tmp.second.first;
if(vis[dis[id][cnt]]) continue;
vis[dis[id][cnt]] = 1;
for(int i = 0;i<g[id].size();i++){
if(dis[g[id][i].first][cnt]>g[id][i].second+dis[id][cnt]){
dis[g[id][i].first][cnt] = g[id][i].second+dis[id][cnt];
q.push(make_pair(dis[g[id][i].first][cnt],make_pair(g[id][i].first,cnt)));
}
if(dis[g[id][i].first][cnt+1]>dis[id][cnt] && cnt<k){
dis[g[id][i].first][cnt+1] = dis[id][cnt];
q.push(make_pair(dis[g[id][i].first][cnt+1],make_pair(g[id][i].first,cnt+1)));
}
}
}
int mins = INT_MAX;
for(int i = 0;i<=k;i++) mins = min(mins,dis[t][i]);
cout<<mins;
return 0;
}