nclude<iostream>
using namespace std;
int n, m;
const int N = 5010;
int a[N][N];//记录初始状态
int f[N][N];//前缀和
int answer;
int main()
{
cin >> n >> m;
while (n--)
{
int x, y, v;
cin >> x >> y >>v;
x++, y++;//将索引基准升为1
a[x][y] += v;//每一个位置价值可能重复叠加
}
//前缀和计算
for (int i = 1; i <= 5001; i++)
{
for (int j = 1; j <= 5001; j++)
{
f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + a[i][j];
}
}
m = min(m, 5001);//将m大于整个区域的情况兼容
//枚举右下角坐标所有情况
for (int i = m; i <= 5001; i++)
{
for (int j = m; j <= 5001; j++)
{
int x1 = i - m + 1;
int y1 = j - m + 1;
int sum = f[i][j] - f[x1 - 1][j] - f[i][y1 - 1] + f[x1-1][y1-1];
answer = max(answer, sum);
}
}
cout << answer << endl;
return 0;
}