#pragma GCC optimize("Ofast", "unroll-loops")

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ld long double

int main() {
	int N; cin >> N;
	int A, B, C;
	cin >> A >> B >> C;
	vector<string> cmd(N);
	for (int i = 0; i < N; ++i)
		cin >> cmd[i];
	ll S = (ll)A + B + C;
	if (S == 0) {
		cout << "No" << endl;
		return 0;
	}
	else if (S == 1) {
		// 愚直シミュレーション
		vector<char> res(N);
		for (int i = 0; i < N; ++i) {
			if (cmd[i] == "AB") {
				if (A == 0 && B == 0) {
					cout << "No" << endl;
					return 0;
				}
				if (A) {
					A = 0, B = 1;
					res[i] = 'B';
				}
				else {
					A = 1, B = 0;
					res[i] = 'A';
				}
			}
			else if (cmd[i] == "BC") {
				if (B == 0 && C == 0) {
					cout << "No" << endl;
					return 0;
				}
				if (B) {
					B = 0, C = 1;
					res[i] = 'C';
				}
				else {
					B = 1, C = 0;
					res[i] = 'B';
				}
			}
			else { // AC
				if (A == 0 && C == 0) {
					cout << "No" << endl;
					return 0;
				}
				if (A) {
					A = 0, C = 1;
					res[i] = 'C';
				}
				else {
					A = 1, C = 0;
					res[i] = 'A';
				}
			}
			//cout << cmd[i] << " " << res[i] << " " << A << " " << B << " " << C << endl;
		}
		cout << "Yes" << endl;
		for (auto resi : res)
			cout << resi << endl;
		return 0;
	}
	// S >= 2
	vector<char> res(N);
	for (int i = 0; i < N; ++i) {
		if (cmd[i] == "AB") {
			if (A == 0 && B == 0) {
				cout << "No" << endl;
				return 0;
			}
			else if (A == 0) {
				--B; ++A;
				res[i] = 'A';
			}
			else if (B == 0) {
				++B; --A;
				res[i] = 'B';
			}
			else if (A == 1 && B == 1) {
				if (i == N - 1) {
					++A; --B;
					res[i] = 'A';
				}
				else if (cmd[i + 1] == "AB") {
					++A; --B;
					res[i] = 'A';
				}
				else if (cmd[i + 1] == "AC") {
					++A; --B;
					res[i] = 'A';
				}
				else {
					--A; ++B;
					res[i] = 'B';
				}
			}
			else {
				if (A > B) {
					--A; ++B;
					res[i] = 'B';
				}
				else {
					++A; --B;
					res[i] = 'A';
				}
			}
		}
		else if (cmd[i] == "BC") {
			if (B == 0 && C == 0) {
				cout << "No" << endl;
				return 0;
			}
			else if (B == 0) {
				--C; ++B;
				res[i] = 'B';
			}
			else if (C == 0) {
				++C; --B;
				res[i] = 'C';
			}
			else if (B == 1 && C == 1) {
				if (i == N - 1) {
					++B; --C;
					res[i] = 'B';
				}
				else if (cmd[i + 1] == "BC") {
					++B; --C;
					res[i] = 'B';
				}
				else if (cmd[i + 1] == "AB") {
					++B; --C;
					res[i] = 'B';
				}
				else {
					--B; ++C;
					res[i] = 'C';
				}
			}
			else {
				if (B > C) {
					--B; ++C;
					res[i] = 'C';
				}
				else {
					++B; --C;
					res[i] = 'B';
				}
			}
		}
		else { // AC
			if (A == 0 && C == 0) {
				cout << "No" << endl;
				return 0;
			}
			else if (A == 0) {
				--C; ++A;
				res[i] = 'A';
			}
			else if (C == 0) {
				++C; --A;
				res[i] = 'C';
			}
			else if (A == 1 && C == 1) {
				if (i == N - 1) {
					++A; --C;
					res[i] = 'A';
				}
				else if (cmd[i + 1] == "AC") {
					++A; --C;
					res[i] = 'A';
				}
				else if (cmd[i + 1] == "AB") {
					++A; --C;
					res[i] = 'A';
				}
				else {
					--A; ++C;
					res[i] = 'C';
				}
			}
			else {
				if (A > C) {
					--A; ++C;
					res[i] = 'C';
				}
				else {
					++A; --C;
					res[i] = 'A';
				}
			}
		}
		// cout << cmd[i] << " " << res[i] << " " << A << " " << B << " " << C << endl;
	}
	cout << "Yes" << endl;
	for (auto resi : res)
		cout << resi << endl;
	return 0;
}

Measured memory_bytes: 6432