#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define INF 10e17 #define rep(i,n) for(long long i=0; i()) #define debug(x) std::cerr << (x) << std::endl; #define roll(x) for (auto&& itr : x) { debug(itr); } template inline void chmax(T &ans, T t) { if (t > ans) ans = t;} template inline void chmin(T &ans, T t) { if (t < ans) ans = t;} // 長さNの線があって、そのうちいくつかの区間に制約があるという状況で何かを最適化する、 // という問題ではDPが有効な場合がある。 using P = pair; int main() { cin.tie(0); ios::sync_with_stdio(false); ll n, m, a; cin >> n >> m >> a; vector> v(n+1); ll p; rep(i, m) { int l,r; cin >> l >> r >> p; v[r].push_back(P(l, p)); } ll ma = 0; vector dp(n+100); for (int i = 1; i <= n; ++i) { dp[i] = ma - a; for (auto x : v[i]) { dp[i] = max(dp[i], dp[x.first - 1] + x.second - (i == n ? 0 : a)); } ma = max(ma, dp[i]); } cout << ma << endl; }