import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;
class Main{
static class V{
int det;
int val;
public V(int det, int val) {
super();
this.det = det;
this.val = val;
}
}
int n
=Integer.
parseInt(stk.
nextToken()); int m
=Integer.
parseInt(stk.
nextToken()); int st
=Integer.
parseInt(br.
readLine());
int dist[] = new int[n+1];
int visited[] = new int[n+1];
for (int i = 0; i < list.length; i++) {
list[i] = new ArrayList<V>();
}
for (int i = 0; i < m; i++) {
list
[Integer.
parseInt(stk.
nextToken())].
add(new V
(Integer.
parseInt(stk.
nextToken()),
Integer.
parseInt(stk.
nextToken()))); }
for (int i = 1; i < n+1; i++) {
dist[i]=987654321;
}
for (int i = 0; i < list[st].size(); i++) {
int det = list[st].get(i).det;
int val = list[st].get(i).val;
dist[det]=val;
}
dist[st]=0;
visited[st]=1;
for (int i =0 ; i < n-1 ; i++) {
int min_index=st;
int min=987654321;
for (int j = 1; j < n+1; j++) {
if(visited[j]!=1 && min > dist[j]) {
min=dist[j];
min_index=j;
}
}
for (int j = 0; j < list[min_index].size(); j++) {
int det = list[min_index].get(j).det;
int val = list[min_index].get(j).val;
if(visited[det]==0 &&dist[min_index]+val<dist[det])
dist[det]=dist[min_index]+val;
}
visited[min_index]=1;
}
for (int i = 1; i < n+1; i++) {
if(dist[i]==987654321)
else {
}
}
}
}