from atcoder import lazysegtree import bisect N,A=map(int,input().split()) inf = 10**18 lst = lazysegtree.LazySegTree( op = lambda x, y: max(x, y), e = -inf, mapping = lambda f, x: f + x, composition = lambda f, g: f + g, id_ = 0, v = [0] * (N) ) Ys = [] d = [] for _ in range(N): x,y,v=map(int,input().split()) Ys.append(y) d.append((x,1, y, v)) d.append((x+A,2, y, v)) Ys.sort() d.sort() ans = 0 for x,n,y,v in d: left = bisect.bisect_left(Ys, y - A) right = bisect.bisect_right(Ys, y) #print(left, right, v) if n == 1: lst.apply(left, right, v) else: lst.apply(left, right, -v) #print([lst.get(i) for i in range(len(Ys))]) ans = max(ans, lst.prod(0, len(Ys))) print(ans)