import java.util.*;
public class Main {
public static void main
(String[] args
) {
Scanner input
= new Scanner
(System.
in);
int v = input.nextInt();
int dist[] = new int[v + 1];
int e = input.nextInt();
ArrayList
<int []> lists
[] = new ArrayList[v
+ 1]; for(int i = 1; i <=v; i++)
lists[i] = new ArrayList<>();
Queue<int[]> que = new PriorityQueue<>((a, b) -> {
if (a[1] < b[1]) return -1;
else if (a[1] > b[1]) return 1;
else return 0;
});
int start = input.nextInt();
dist[start] = 0;
for (int i = 0; i < e; i++) {
int a = input.nextInt();
int b = input.nextInt();
int c = input.nextInt();
int temp[] = new int[2];
temp[0] = b;
temp[1] = c;
lists[a].add(temp);
if (a == start) {
dist[b] = c;
que.add(temp);
}
}
while (!que.isEmpty()) {
int temp[] = que.poll();
int current = temp[0];
int value = temp[1];
for(int i = 0; i < lists[current].size(); i++){
int next[] = new int[2];
next[0] = lists[current].get(i)[0];
next[1] = value + lists[current].get(i)[1];
if(dist[next[0]] > next[1]){
dist[next[0]] = next[1];
que.add(next);
}
}
}
for (int i = 1; i <= v; i++)
else System.
out.
println("INF");
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCiAgICAgICAgU2Nhbm5lciBpbnB1dCA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CgogICAgICAgIGludCB2ID0gaW5wdXQubmV4dEludCgpOwogICAgICAgIGludCBkaXN0W10gPSBuZXcgaW50W3YgKyAxXTsKICAgICAgICBBcnJheXMuZmlsbChkaXN0LCBJbnRlZ2VyLk1BWF9WQUxVRSk7CiAgICAgICAgaW50IGUgPSBpbnB1dC5uZXh0SW50KCk7CiAgICAgICAgQXJyYXlMaXN0PGludCBbXT4gbGlzdHNbXSA9IG5ldyBBcnJheUxpc3RbdiArIDFdOwogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD12OyBpKyspCiAgICAgICAgICAgIGxpc3RzW2ldID0gbmV3IEFycmF5TGlzdDw+KCk7CgogICAgICAgIFF1ZXVlPGludFtdPiBxdWUgPSBuZXcgUHJpb3JpdHlRdWV1ZTw+KChhLCBiKSAtPiB7CiAgICAgICAgICAgIGlmIChhWzFdIDwgYlsxXSkgcmV0dXJuIC0xOwogICAgICAgICAgICBlbHNlIGlmIChhWzFdID4gYlsxXSkgcmV0dXJuIDE7CiAgICAgICAgICAgIGVsc2UgcmV0dXJuIDA7CiAgICAgICAgfSk7CgogICAgICAgIGludCBzdGFydCA9IGlucHV0Lm5leHRJbnQoKTsKICAgICAgICBkaXN0W3N0YXJ0XSA9IDA7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZTsgaSsrKSB7CiAgICAgICAgICAgIGludCBhID0gaW5wdXQubmV4dEludCgpOwogICAgICAgICAgICBpbnQgYiA9IGlucHV0Lm5leHRJbnQoKTsKICAgICAgICAgICAgaW50IGMgPSBpbnB1dC5uZXh0SW50KCk7CgogICAgICAgICAgICBpbnQgdGVtcFtdID0gbmV3IGludFsyXTsKICAgICAgICAgICAgdGVtcFswXSA9IGI7CiAgICAgICAgICAgIHRlbXBbMV0gPSBjOwoKICAgICAgICAgICAgbGlzdHNbYV0uYWRkKHRlbXApOwoKICAgICAgICAgICAgaWYgKGEgPT0gc3RhcnQpIHsKICAgICAgICAgICAgICAgIGRpc3RbYl0gPSBjOwogICAgICAgICAgICAgICAgcXVlLmFkZCh0ZW1wKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIHdoaWxlICghcXVlLmlzRW1wdHkoKSkgewoKICAgICAgICAgICAgaW50IHRlbXBbXSA9IHF1ZS5wb2xsKCk7CiAgICAgICAgICAgIGludCBjdXJyZW50ID0gdGVtcFswXTsKICAgICAgICAgICAgaW50IHZhbHVlID0gdGVtcFsxXTsKCiAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsaXN0c1tjdXJyZW50XS5zaXplKCk7IGkrKyl7CiAgICAgICAgICAgICAgICBpbnQgbmV4dFtdID0gbmV3IGludFsyXTsKICAgICAgICAgICAgICAgIG5leHRbMF0gPSBsaXN0c1tjdXJyZW50XS5nZXQoaSlbMF07CiAgICAgICAgICAgICAgICBuZXh0WzFdID0gdmFsdWUgKyBsaXN0c1tjdXJyZW50XS5nZXQoaSlbMV07CiAgICAgICAgICAgICAgICBpZihkaXN0W25leHRbMF1dID4gbmV4dFsxXSl7CiAgICAgICAgICAgICAgICAgICAgZGlzdFtuZXh0WzBdXSA9IG5leHRbMV07CiAgICAgICAgICAgICAgICAgICAgcXVlLmFkZChuZXh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHY7IGkrKykKICAgICAgICAgICAgaWYgKGRpc3RbaV0gIT0gSW50ZWdlci5NQVhfVkFMVUUpIFN5c3RlbS5vdXQucHJpbnRsbihkaXN0W2ldKTsKICAgICAgICAgICAgZWxzZSBTeXN0ZW0ub3V0LnByaW50bG4oIklORiIpOwoKCiAgICB9Cgp9Cg==