#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int dp[1010]={0};
struct st{//定义结构体
int s,e,v;//开始 结束 生产值
}cow[1010];
bool cmp(st a,st b)//从定义排序
{
return a.e<b.e;
}
int main()
{
int n,m,r;
cin>>n>>m>>r;
for(int i=0;i<m;i++)
{
cin>>cow[i].s>>cow[i].e>>cow[i].v;
}
sort(cow,cow+m,cmp);
int ans=-1;
for(int i=0;i<m;i++)
{
dp[i]=cow[i].v;//定义初始值为每个时间段的生产值
for(int j=0;j<i;j++)//如果在这个时间段之前还有满足条件的 取较大的
{
if(cow[j].e+r<=cow[i].s)
dp[i]=max(dp[i],cow[i].v+dp[j]);//dp[i]会不断被更新为在i之前的最佳值
}
ans=max(dp[i],ans);
}
cout<<ans<<endl;
}