N,M,B=map(int,input().split()) result=[-1]*N G=[[] for i in range(N)] for i in range(M): a,b,c=map(int,input().split()) G[a-1].append((b-1,c)) G[b-1].append((a-1,c)) from collections import deque for i in range(N): if result[i]!=-1: continue for x in range(B): S=deque() S.append(i) A=set() A.add(i) result[i]=x ans=True while S: pos=S.pop() for E in G[pos]: ne,t=E[:] if result[ne]==-1: result[ne]=(t-result[pos])%B S.append(ne) A.add(ne) else: if result[ne]!=(t-result[pos])%B: ans=False if ans==True: break else: for pos in A: result[pos]=-1 if min(result)>=0: print('Yes') print(*result) else: print('No')