#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
const int N = 1e6 + 10;
int n , m , d , f[N];
inline int du(){
int x = 0 , f = 1;
char ch = getchar();
while(ch > '9' || ch < '0'){if(ch == '-')f = -1;ch = getchar();}
while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}
return x * f;
}
inline void write(int x){
if(x < 0){putchar('-');x = -x;}
if(x > 9)write(x / 10);
putchar(x % 10 ^ 48);
return;
}
struct node{
int st , v;
node(){}
node(int _st , int _v){
st = _st , v = _v;
}
};
vector<vector<node> > vec(N);
int main(void){
n = du() , m = du() , d = du();
int st , ed , v;
for(int i = 1 ; i <= m ; ++ i){
st = du() , ed = du() , v = du();
vec[ed].push_back(node(st , v));
}
for(int i = 1 ; i <= n ; ++ i){
f[i] = max(f[i] , f[i - 1]);
for(int j = 0 ; j < vec[i].size() ; ++ j){
f[i] = max(f[i] , f[vec[i][j].st - d - 1] + vec[i][j].v);
}
}
write(f[n]);
return 0;
}