#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } const long long MAX = 5100000; const long long INF = 1LL << 60; const int inf = 1 << 28; const long long mod = 1000000007LL; //const long long mod = 998244353LL; using namespace std; typedef unsigned long long ull; typedef long long ll; vector> g[100010]; int main() { /* cin.tie(nullptr); ios::sync_with_stdio(false); */ ll N, M, A; scanf("%lld %lld %lld", &N, &M, &A); for (int i = 0; i < M; i++) { ll l, r, p; scanf("%lld %lld %lld", &l, &r, &p); g[r].emplace_back(l, p); } vector dp(N + 5); dp[0] = 0; ll res = 0; ll mx = 0; for (ll i = 1; i <= N; i++) { for (auto e : g[i]) { chmax(dp[i], dp[e.first - 1] + e.second); } chmax(dp[i], mx); if(i != N) dp[i] -= A; chmax(mx, dp[i]); chmax(res, dp[i]); } cout << res << endl; return 0; /* おまじないを使ったらscanfとprintf関連注意!!!!!!!!!!!! */ }