#include using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; ll 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]; int full = (1 << N) - 1; vector sumA(1 << N, 0); for (int S = 1; S <= full; S++) { int j = __builtin_ctz((unsigned)S); sumA[S] = sumA[S ^ (1 << j)] + A[j]; } const ll INF = LLONG_MAX / 4; vector bestC3(1 << N, INF); // dp[S] = 最小makespan vector keepC2(1 << N, INF); // そのときの c2 を1つだけ保持 bestC3[0] = 0; keepC2[0] = 0; for (int S = 0; S <= full; S++) { if (bestC3[S] >= INF) continue; for (int j = 0; j < N; j++) { if (S & (1 << j)) continue; int T = S | (1 << j); ll c1p = sumA[T]; ll c2p = max(keepC2[S], c1p) + B[j]; ll c3p = max(bestC3[S], c2p) + C[j]; if (c3p < bestC3[T]) { // c3 だけで比較 -> ここが誤り bestC3[T] = c3p; keepC2[T] = c2p; } } } cout << (bestC3[full] <= D ? "Yes" : "No") << "\n"; return 0; }