#include <iostream>
#include<algorithm>
using namespace std;
int arr[5005][5005];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int x,y;
int n,r;cin>>n>>r;
int a=r,b=r;//将初始边界设为r,防止点在0行0列的情况
for(int i=0;i<n;i++)
{
int x,y,v;
cin>>x>>y>>v;arr[x+1][y+1]=v;//将坐标进行平移,防止越界
a=max(a,x+1);
b=max(b,y+1);
}
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)//所有点在1到a+1,1到b+1上;
{
arr[i][j]+=arr[i-1][j]+arr[i][j-1]-arr[i-1][j-1]; //利用二维前缀进行处理;
}
}
int ans=0;
for(int j=r;j<=b;j++)
{
ans=max(ans,arr[i][j]-arr[i-r][j]-arr[i][j-r]+arr[i-r][j-r]);
}
}
cout<<ans;
return 0;
}
#include<algorithm>
using namespace std;
int arr[5005][5005];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int x,y;
int n,r;cin>>n>>r;
int a=r,b=r;//将初始边界设为r,防止点在0行0列的情况
for(int i=0;i<n;i++)
{
int x,y,v;
cin>>x>>y>>v;arr[x+1][y+1]=v;//将坐标进行平移,防止越界
a=max(a,x+1);
b=max(b,y+1);
}
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)//所有点在1到a+1,1到b+1上;
{
arr[i][j]+=arr[i-1][j]+arr[i][j-1]-arr[i-1][j-1]; //利用二维前缀进行处理;
}
}
int ans=0;
for(int i=r;i<=a;i++)//本来最开始情况是从0开始算,r范围内的点,下标为r-1;但整体向外平移了1个单位,所以下标变为r;
//从最小的起点开始算,最远的点在a+1,下标为a;
{for(int j=r;j<=b;j++)
{
ans=max(ans,arr[i][j]-arr[i-r][j]-arr[i][j-r]+arr[i-r][j-r]);
}
}
cout<<ans;
return 0;
}