import sys sys.setrecursionlimit(5*10**5) input = sys.stdin.readline from collections import defaultdict, deque, Counter from heapq import heappop, heappush from bisect import bisect_left, bisect_right from math import gcd n,m = map(int,input().split()) xyh = [list(map(int,input().split())) for i in range(n)] xyh = [[x-y,x+y,h] for x,y,h in xyh] mod = 998244353 allx = [] inx = defaultdict(list) outx = defaultdict(list) xs = set() for i in range(n): x,y,h = xyh[i] inx[x-(m-h)].append(i) outx[x+(m-h)].append(i) xs.add(x-(m-h)) xs.add(x+(m-h)) xs = sorted(list(xs)) ans = [0]*(n+1) nowy = set() cnt = 0 lastx = -10**18 for xi in xs: iny = defaultdict(list) outy = defaultdict(list) ys = set() for i in nowy: x,y,h = xyh[i] iny[y-(m-h)].append(i) outy[y+(m-h)].append(i) ys.add(y-(m-h)) ys.add(y+(m-h)) ys = sorted(list(ys)) cnt = 0 lasty = -10**18 for yi in ys: ans[cnt] += (yi-lasty)*(xi-lastx)%mod cnt -= len(outy[yi]) cnt += len(iny[yi]) lasty = yi lastx = xi for i in outx[xi]: nowy.discard(i) for i in inx[xi]: nowy.add(i) div2 = pow(2, mod-2, mod) for i in range(len(ans)): ans[i] = ans[i]*div2%mod print(*ans[1:], sep = "\n")