#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int s,t,n,m,k,dis[N],cnt[N];
struct graph{
int u,w;
};
int operator<(graph x,graph y){
return x.w>y.w;
}
vector<graph>g[N],inv[N];
void bfs(int s){
memset(dis,-1,sizeof(dis));
priority_queue<graph>q;
q.push({s,0});
while(!q.empty()){
auto [u,w]=q.top();
q.pop();
if(dis[u]==-1){
dis[u]=w;
for(auto [v,tmpw]:inv[u]){
if(dis[v]==-1){
q.push({v,w+tmpw});
}
}
}
}
}
struct status{
int u,w,real;
};
int operator<(status x,status y){
return x.w>y.w;
}
void Astar(int s){
priority_queue<status>q;
q.push({s,dis[s],0});
while(!q.empty()){
auto [u,w,real]=q.top();
q.pop();
cnt[u]++;
if(u==t){
cout<<real<<'\n';
}
if(cnt[t]==k){
return;
}
for(auto [v,tmpw]:g[u]){
q.push({v,w+tmpw+dis[v],real+tmpw});
}
}
}
int main(){
cin>>n>>m>>k;
for(int u,v,w;m--;){
cin>>u>>v>>w,g[u].push_back({v,w}),inv[v].push_back({u,w});
}
s=n,t=1;
bfs(t),Astar(s);
for(int i=1;i<=k-cnt[t];i++){
cout<<"-1\n";
}
}