//炸弹的边长为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;

}