#include #include using namespace std; using ll = long long; #define overload4(a, b, c, d, name, ...) name #define rep1(n) for (ll i = 0; i < n; ++i) #define rep2(i, n) for (ll i = 0; i < n; ++i) #define rep3(i, a, b) for (ll i = a; i < b; ++i) #define rep4(i, a, b, c) for (ll i = a; i < b; i += c) #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) void solve(); int main() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(20); ll t = 1; // cin >> t; for (int i = 1; i <= t; i++) solve(); return 0; } ll dy[4] = {-1, 0, 1, 0}, dx[4] = {0, 1, 0, -1}; void solve() { ll n, t; cin >> n >> t; constexpr ll T = 2e5 + 10; vector> eve(T); rep(i, n) { ll l, r, p; cin >> l >> r >> p; eve[l].push_back(p); eve[r + 1].push_back(-p); } multiset cur; vector ma(T); rep(i, T) { for (auto x : eve[i]) { if (x > 0) cur.insert(x); else cur.erase(cur.find(-x)); } if (!cur.empty()) ma[i] = *cur.rbegin(); } vector dp(T); rep(i, T) { if (i < t) dp[i] = ma[i]; else dp[i] = max(dp[i - 1], dp[i - t] + ma[i]); } cout << *max_element(dp.begin(), dp.end()) << endl; }