import sys input = sys.stdin.readline mod=998244353 N,M=map(int,input().split()) XY=[list(map(int,input().split())) for i in range(N)] LIST=[] LISTX=[] LISTY=[] for x,y,h in XY: x0=x+y y0=x-y if h<=M: k=M-h LIST.append([x0-k,y0-k,+1]) LIST.append([x0+k,y0-k,-1]) LIST.append([x0-k,y0+k,-1]) LIST.append([x0+k,y0+k,+1]) LISTX.append(x0-k) LISTX.append(x0+k) #LISTX.append(x0+k+1) LISTY.append(y0-k) LISTY.append(y0+k) #LISTY.append(y0+k+1) LISTX=sorted(set(LISTX)) LISTY=sorted(set(LISTY)) #LISTX=list(range(-10,10)) #LISTY=list(range(-10,10)) DX={LISTX[i]:i for i in range(len(LISTX))} DY={LISTY[i]:i for i in range(len(LISTY))} for i in range(len(LIST)): LIST[i][0]=DX[LIST[i][0]] LIST[i][1]=DY[LIST[i][1]] DP=[[0]*(len(LISTX)+4) for i in range(len(LISTX)+4)] for x,y,h in LIST: DP[x][y]+=h #print(LIST) #for dp in DP: # print(*dp) #print() for i in range(len(LISTX)): for j in range(len(LISTY)): DP[i][j]+=DP[i-1][j] for i in range(len(LISTX)): for j in range(len(LISTY)): DP[i][j]+=DP[i][j-1] #for dp in DP: # print(*dp) ANS=[0]*(N+1) for i in range(len(LISTX)-1): for j in range(len(LISTY)-1): ANS[DP[i][j]]+=(LISTX[i+1]-LISTX[i])*(LISTY[j+1]-LISTY[j]) #print(i,j,ANS) INV=pow(2,mod-2,mod) for i in range(1,len(ANS)): ANS[i]=ANS[i]*INV%mod print(ANS[i])