#include <bits/stdc++.h>
using namespace std;
int n, m, s, d[100005];
vector<pair<int, int> > g[100005];
bool vis[100005];
void dijkstra()
{
memset(d, 0x3f, sizeof(d));
d[s]=0;
priority_queue<pair<int, int>> q;
q.push({0, s});
while (!q.empty())
{
int fr = q.top().second;
q.pop();
if (vis[fr])continue;
vis[fr] = 1;
for (auto &i : g[fr])
{
int v = i.first, w = i.second;
if (d[fr] + w < d[v])
{
d[v] = d[fr] + w;
q.push({-d[v], v});
}
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(nullptr);
cin >> n >> m >> s;
for (int i = 1; i <= m; i++)
{
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w});
}
dijkstra();
for (int i = 1; i <= n; i++)
{
cout << d[i] << ' ';
}
return 0;
}