#include using namespace std; using int64 = long long; using i128 = __int128_t; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; int64 P, Q; cin >> N >> P >> Q; vector X(N), A(N), B(N); vector L(N), U(N), y(N); i128 sumX = 0, sumL = 0, sumU = 0; for (int i = 0; i < N; i++) { cin >> X[i] >> A[i] >> B[i]; L[i] = max(0LL, X[i] - B[i]); U[i] = min(A[i], X[i]); if (L[i] > U[i]) { cout << "No\n"; return 0; } sumX += (i128)X[i]; sumL += (i128)L[i]; sumU += (i128)U[i]; } // 総タイプ1枚数 T の許容範囲 // 在庫: sum y_i <= P かつ sum(X_i - y_i) <= Q <=> sum y_i >= sumX - Q i128 low = max(sumL, sumX - (i128)Q); i128 high = min(sumU, (i128)P); if (low > high) { cout << "No\n"; return 0; } i128 T = low; // 1つ選べば良い(ここでは最小) i128 rem = T - sumL; // 追加で配れるタイプ1枚数 for (int i = 0; i < N; i++) y[i] = L[i]; for (int i = 0; i < N && rem > 0; i++) { i128 cap = (i128)(U[i] - L[i]); i128 add = min(rem, cap); y[i] += (int64)add; rem -= add; } // rem は必ず 0 になる(T <= sumU のため) cout << "Yes\n"; for (int i = 0; i < N; i++) { int64 t1 = y[i]; int64 t2 = X[i] - y[i]; cout << t1 << " " << t2 << "\n"; } return 0; }