#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000005 #define Inf64 1000000000000000001LL long long op(long long a,long long b){ return max(a,b); } long long e(){ return 0; } long long mapping(long long a,long long b){ return a + b; } long long composition(long long a,long long b){ return a + b; } long long id(){ return 0; } int main(){ long long N,A; cin>>N>>A; A *= 2; vector x(N),y(N),v(N); rep(i,N){ cin>>x[i]>>y[i]>>v[i]; x[i] *= 2; y[i] *= 2; } auto tx = x; rep(i,N){ tx.push_back(x[i]+A); tx.push_back(x[i]+A+1); tx.push_back(x[i]+A-1); } sort(tx.begin(), tx.end()); tx.erase(unique(tx.begin(), tx.end()), tx.end()); vector ty; rep(i,N){ ty.push_back(y[i]-A); ty.push_back(y[i]+1); } sort(ty.begin(), ty.end()); ty.erase(unique(ty.begin(), ty.end()), ty.end()); vector Add(tx.size(),vector>()); rep(i,N){ int xx = lower_bound(tx.begin(), tx.end(), x[i]) - tx.begin(); int ll = lower_bound(ty.begin(), ty.end(), y[i]-A) - ty.begin(); int rr = lower_bound(ty.begin(), ty.end(), y[i]+1) - ty.begin(); Add[xx].push_back({ll,rr,v[i]}); } lazy_segtree seg(ty.size()); long long ans = 0; int ci = 0; rep(i,tx.size()){ rep(j,Add[i].size()){ int l = Add[i][j][0]; int r = Add[i][j][1]; long long v = Add[i][j][2]; seg.apply(l, r, v); } while(tx[i] - tx[ci] > A){ rep(j,Add[ci].size()){ int l = Add[ci][j][0]; int r = Add[ci][j][1]; long long v = Add[ci][j][2]; seg.apply(l, r, -v); } ci++; } ans = max(ans, seg.all_prod()); } cout<