#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int t[N][10];
vector<int>d[N],e[N];
int n,m,k;
struct xy{
int x;
int y;
};
void bfs(int g){
queue<xy>q;
xy j;
j.x=g;
j.y=1;
q.push(j);
t[g][1]=0;
while(q.size()){
xy u=q.front();
q.pop();
for(int i=0;i<d[u.x].size();i++){
if(t[d[u.x][i]][u.y]>t[u.x][u.y]+e[u.x][i]){
t[d[u.x][i]][u.y]=t[u.x][u.y]+e[u.x][i];
xy z;
z.x=d[u.x][i];
z.y=u.y;
q.push(z);
}
if(u.y<k+1&&t[d[u.x][i]][u.y+1]>t[u.x][u.y]){
t[d[u.x][i]][u.y+1]=t[u.x][u.y];
xy z;
z.x=d[u.x][i];
z.y=u.y+1;
q.push(z);
}
}
}
return;
}
int main(){
cin>>n>>m>>k;
int s,y;
cin>>s>>y;
s++,y++;
for(int i=1;i<=k+1;i++){
for(int j=1;j<=n;j++){
t[j][i]=1e9;
}
}
for(int i=1;i<=m;i++){
int a,b,c;
cin>>a>>b>>c;
a++,b++;
d[a].push_back(b);
e[a].push_back(c);
d[b].push_back(a);
e[b].push_back(c);
}
bfs(s);
int cnt=1e9;
for(int i=1;i<=k+1;i++){
cnt=min(cnt,t[y][i]);
}
cout<<cnt;
return 0;
}