#include #include #include #include using namespace std; using i32 = int; using i64 = long long; using i128 = __int128_t; using f64 = double; using p2 = pair; using el = tuple; using mint = atcoder::modint998244353; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(18); _main(); } i64 op(i64 a, i64 b) {return max(a, b);} i64 e() {return 0ll;} void _main() { i64 n, T; cin >> n >> T; atcoder::lazy_segtree seg(300000); for (i64 i = 0; i < n; i++) { i64 l, r, p; cin >> l >> r >> p; seg.apply(l, r + 1, p); } vector dp(300000, 0); i64 mx = 0; i64 ans = 0; for (i64 i = dp.size() - 1; i >= 0; i--) { if (i + T < dp.size()) mx = max(mx, dp[i + T]); dp[i] = mx + seg.get(i); ans = max(ans, dp[i]); } cout << ans << "\n"; }