dp题。
/*
POJ: 3616 Milking Time
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#define M 1005
using namespace std;
struct Interval {
long long start, end;
long long eff;
bool operator < (const struct Interval &t) const {
if(start == t.start)
return end < t.end;
else
return start < t.start;
}
}inter[M];
long long dp[M];
long n, r;
int m;
void DyP()
{
for(int i = 0; i < m; i++)
dp[i] = inter[i].eff;
for(int i = 1; i < m; i++) {
for(int j = 0; j < i; j++) {
if(inter[i].start - inter[j].end >= r) {
dp[i] = max(dp[j] + inter[i].eff, dp[i]);
}
}
}
}
int main()
{
//freopen("data.in", "rb", stdin);
while(scanf("%ld%d%ld", &n, &m, &r) != EOF) {
for(int i = 0; i < m; i++) {
cin >> inter[i].start >> inter[i].end >> inter[i].eff;
}
sort(inter, inter + m);
DyP();
long long res = 0;
for(int i = 0; i < m; i++)
res = max(res, dp[i]);
cout << res << endl;
}
return 0;
}