#include <iostream>
using namespace std;
struct sen{
long x;
long y;
long f;
long vt;
};
int main()
{
long n, k;
cin >> n >> k;
sen *p1= new sen [n+5];
sen *p2= new sen[n+5];
long *luu= new long [n+5];
long *maxi= new long [100005];
long *maxj= new long [100005];
long *vt= new long[100005];
for(long i=1; i<=n; i++){
cin >> p1[i].x>> p1[i].y>> p1[i].f;
maxi[p1[i].x]=0;
maxj[p1[i].y]=0;
p1[i].vt=i;
p2[i]=p1[i];
}
sen t=p1[1];
for(long i=1; i<=n-1; i++){
for(long j=i+1; j<=n; j++){
if(p1[i].x>p1[j].x){
sen temp=p1[i];
p1[i]=p1[j];
p1[j]= temp;
}
else if(p1[i].x==p1[j].x){
if(p1[i].y>p1[j].y){
sen temp=p1[i];
p1[i]=p1[j];
p1[j]= temp;
}
}
//
if(p2[i].y>p2[j].y){
sen temp=p2[i];
p2[i]=p2[j];
p2[j]= temp;
}
else if(p2[i].y==p2[j].y){
if(p2[i].x>p2[j].x){
sen temp=p2[i];
p2[i]=p2[j];
p2[j]= temp;
}
}
}
}
for(long i=1; i<=n; i++){
vt[p2[i].vt]=i;
}
long kq = t.f;
luu[1]=kq;
for(int i=2; i<=n; i++){
long k1;
if(p1[i].x==p1[i-1].x && luu[p1[i-1].vt]>=k){
k1=luu[p1[i-1].vt]-k+p1[i].f;
if(maxi[p1[i].x]<k1) maxi[p1[i].x]=k1;
}
else {
k1=0;
}
long k2;
long x=vt[p1[i].vt];
if(p2[x].y==p2[x-1].y&& luu[p2[x-1].vt]>=k){
k2=luu[p2[x-1].vt]-k+p2[x].f;
if(maxj[p1[i].y]<k1) maxj[p1[i].y]=k2;
}
else {
k2=0;
}
k1=maxi[p1[i].x]> k1 ? maxi[p1[i].x]:k1;
k2=maxj[p1[i].y]> k2 ? maxj[p1[i].y]:k2;
luu[p1[i].vt]=k1>k2?k1:k2;
}
cout << luu[n]<< endl;
return 0;
}