#include <bits/stdc++.h>
using namespace std;
#define MAXN 5001
int T, n, m, u, v, w;
struct Edge{
int v, w;
};
vector<Edge> e[MAXN];
int dis[MAXN], cnt[MAXN];
bitset<MAXN> vis;
queue<int> que;
void spfa(int s){
que.push(s);
dis[s] = 0;
vis[s] = true;
while (!que.empty()){
u = que.front();
que.pop();
vis[u] = false;
for (auto i: e[u]){
v = i.v;
w = i.w;
if (dis[v] > dis[u] + w){
dis[v] = dis[u] + w;
cnt[v] = cnt[u] + 1;
if (cnt[v] >= n){
cout << "NO\n";
exit(0);
}
if (!vis[v]){
que.push(v);
vis[v] = true;
}
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> T;
cin >> n >> m;
while (m--){
cin >> u >> v >> w;
e[v].push_back({u, -w});
}
for (int i=1; i<=n; i++) e[0].push_back({i, 0});
memset(dis, 0x3f, sizeof(dis));
spfa(0);
for (int i=1; i<=n; ++i) cout << dis[i] << ' ';
return 0;
}