#include<bits/stdc++.h>
using namespace std;
vector<pair<long long,long long>> idk[100001];
vector<pair<long long,long long>> seg(400001);
vector<long long> wow(400001);
long long n,m,k;
void build(long long l, long long r, long long x) {
seg[x] = {-1000000000000000000LL,0};
wow[x] = 0;
if(l == r) {
return;
}
long long mid = (l+r)/2;
build(l,mid,x*2);
build(mid+1,r,x*2+1);
}
void upd(long long l, long long r, long long x, long long ql, long long qr, pair<long long,long long> br) {
if(l > qr || r < ql) {
return;
}
if(l >= ql && r <= qr) {
if(br.second != 1) {
seg[x] = br;
return;
}
seg[x] = {seg[x].first+br.first,seg[x].second};
wow[x]+=br.first;
return;
}
long long mid = (l+r)/2;
upd(l,mid,x*2,ql,qr,br);
upd(mid+1,r,x*2+1,ql,qr,br);
seg[x] = max(seg[x*2],seg[x*2+1]);
seg[x] = {seg[x].first+wow[x],seg[x].second};
}
pair<long long,long long> calc(long long lamb) {
build(0,n,1);
vector<pair<long long,long long>> dp(n+1);
upd(0,n,1,0,0,{0,0});
for(long long i = 1; i <= n; i++) {
for(pair<long long,long long> v: idk[i]) {
upd(0,n,1,v.first,i-1,{v.second,1});
}
dp[i] = max(dp[i-1],{seg[1].first-lamb,seg[1].second-1});
upd(0,n,1,i,i,{dp[i].first,dp[i].second});
}
return {dp[n].first,-dp[n].second};
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
long long a,b,c,sb = 0;
cin >> n >> m >> k;
for(long long i = 0; i < m; i++) {
cin >> a >> b >> c;
idk[b].push_back({a,c});
sb+=c;
}
long long l = 0,r = 100000000000000LL;
while(l < r) {
long long mid = (l+r+1)/2;
if(calc(mid).second >= k) {
l = mid;
}
else {
r = mid-1;
}
}
pair<long long,long long> y = calc(l),z = calc(l+1);
y = {y.first+y.second*l,y.second};
z = {z.first+z.second*(l+1),z.second};
if(y.second <= k) {
cout << sb-y.first;
return 0;
}
long long d = (z.first-y.first)/(y.second-z.second);
long long ans = y.first+(y.second-k)*d;
cout << sb-ans;
return 0;
}