//炸弹的边长为r,能够包括的点数最多为人r^2个点,那么我们对点数为r^2的子矩阵求和,找出其中最大值;
#include<iostream>
using namespace std;
int map[5001][5001];
int ans[5001][5001];
int main(){
int a,r;
cin>>a>>r;
for(int i=0;i<a;i++){
int x1,x2,x3;
cin>>x1>>x2>>x3;
map[x1+1][x2+1]=x3;//将点存进map数组;
}
for(int i=0;i<=5000;i++){
for(int j=1;j<=5000;j++){
map[i][j]+=map[i][j-1];//每行的前缀和
}
}
for(int i=0;i<=5000;i++){
for(int j=1;j<=5000;j++){
map[j][i]+=map[j-1][i];//每列求前缀和
}
}</iostream>
for(int i=0;i<=5000-r;i++){ for(int j=0;j<=5000-r;j++){ ans[i][j]=map[i][j]+map[i+r][j+r]-map[i+r][j]-map[i][j+r];//遍历所有大小为r^2的区间并求和; } } int maxn=0; for(int i=0;i<5000;i++) for(int j=0;j<5000;j++){ if(ans[i][j]>maxn)maxn=ans[i][j];//找出最大值; } cout<<maxn<<endl; return 0;
}