#include using namespace std; using ll = long long; // --- 初期設定(入出力の高速化と小数15桁出力) --- struct Init { Init() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); } } init; // ------------------------------------------------ // Johnson法解法 int main() { int N, D; cin >> N >> D; vector a(N), b(N), c(N); for (int i = 0; i < N; i++) { cin >> a[i] >> b[i] >> c[i]; } // 各ジョブを (P1, P2, id) の形で持ち、A/B に振り分け vector A, B; for (int i = 0; i < N; i++) { if (a[i] + b[i] <= b[i] + c[i]) A.push_back(i); else B.push_back(i); } sort(A.begin(), A.end(), [&](int i, int j) { return a[i] + b[i] < a[j] + b[j]; }); sort(B.begin(), B.end(), [&](int i, int j) { return b[i] + c[i] > b[j] + c[j]; }); vector order; order.reserve(N); for (int i : A) order.push_back(i); for (int i : B) order.push_back(i); //Johnson法で納期計算 int t1 = 0, t2 = 0, t3 = 0; for (int i : order) { t1 = t1 + a[i]; t2 = max(t1, t2) + b[i]; t3 = max(t2, t3) + c[i]; } cout << (t3 <= D ? "Yes" : "No") << endl; return 0; }