R,O=range,print J=lambda:map(int,input().split()) N,M,B=J() p=[i for i in R(B*N)] def r(i): m=p[i] while i!=m: p[i]=i=p[m] m=p[i] return i for m in R(M): i,j,c=J() i,j=i-1,j-1 for x in R(B):p[r(i+x*N)]=r(j+(c-x)%B*N) C=set() for i in R(N): D=set() for v in R(i,i+B*N,N):[D,C][p[v]in D].add(p[v]) D=set() X=[-1]*N for i in R(N): for x in R(B): if p[r(i+x*N)]in D: X[i]=x break if X[i]<0: for x in R(B): if not p[r(i+x*N)]in C: D.add(p[r(i+x*N)]) X[i]=x break if X[i]<0:O("No"),exit() O("Yes") O(*X)