#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
#define loop(i, a, b) for(li i=a; i<=b; i++)
#define stuff ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long li;
typedef long double ld;
typedef pair<int, int> ii;
typedef pair<li, li> lii;
typedef vector<int> vi;
typedef vector<li> vli;
typedef vector<ii> vii;
typedef vector<lii> vlii;
li mod = 1e9+7;
li expo(li base, li exponent)
{
	li ans=1;
	while(exponent)
	{
		if(exponent&1) ans = (ans*base)%mod;
		base = (base*base)%mod;
		exponent >>= 1;
	}
	return ans;
}
li gcd(li x, li y)
{
	if(y==0) return x;
	return gcd(y, x%y);
}


typedef tree<li, null_type, less<li>,
rb_tree_tag, tree_order_statistics_node_update> ordered_set;

const li mxN = 2e5+4;
// li ar[mxN];
// li mx[mxN][3];
// li mn[mxN][3];
li ab[mxN], bc[mxN], ac[mxN];
string ar[mxN];
li a, b, c, n;
bool ok=true;
vector<int> ans;
string s[3] = {"AB", "BC", "AC"};
void f1()
{
	for(int i=0; i<n; i++)
	{
		// cout << a << b << c << endl;
		li x=-1, y=-1;
		if(ar[i]==s[0]) x=a, y=b;
		if(ar[i]==s[1]) x=b, y=c;
		if(ar[i]==s[2]) x=a, y=c;
		// cout << x << y << "p" << endl;
		if(x==0 && y==0) {ok=false; return;}
		int tmp;
		if(ar[i]==s[0])
		{
			// cout << "hey" << endl;
			// cout << x << y << endl;
			if(x>y) tmp=2, a--, b++;
			else tmp=1, a++, b--;
		}
		if(ar[i]==s[1])
		{
			if(x>y) tmp=3, b--, c++;
			else tmp=2, b++, c--;
		}
		if(ar[i]==s[2])
		{
			if(x>y) tmp=3, a--, c++;
			else tmp=1, a++, c--;
		}
		ans.pb(tmp);
	}
}
void f2()
{
	for(int i=0; i<n; i++)
	{
		// cout << a << b << c << endl;
		li x=-1, y=-1;
		if(ar[i]==s[0]) x=a, y=b;
		if(ar[i]==s[1]) x=b, y=c;
		if(ar[i]==s[2]) x=a, y=c;
		// cout << x << y << endl;
		if(x==0 && y==0) {ok=false; return;}
		int tmp;
		if(ar[i]==s[0])
		{
			if(x==y)
			{
				li p=bc[i], q=ac[i];
				x=q; y=p;
				// if(p<q) tmp=2, a--, b++;
			}
			if(x>y) tmp=2, a--, b++;
			else tmp=1, a++, b--;
		}
		if(ar[i]==s[1])
		{
			if(x==y)
			{
				li p=ac[i], q=ab[i];
				x=q; y=p;
				// if(q>p) tmp=2, a--, b++;
			}
			if(x>y) tmp=3, b--, c++;
			else tmp=2, b++, c--;
		}
		if(ar[i]==s[2])
		{
			if(x==y)
			{
				li p=bc[i], q=ab[i];
				x=q; y=p;
				// if(p<q) tmp=2, a--, b++;
			}
			if(x>y) tmp=3, a--, c++;
			else tmp=1, a++, c--;
		}
		ans.pb(tmp);
	}
}
int main()
{
	stuff;
	// #ifndef ONLINE_JUDGE 
	// freopen("input.txt", "r", stdin);
	// freopen("output.txt", "w", stdout);
	// freopen("error.txt", "w", stderr);
	// #endif

	// li n, a, b, c;/
	cin >> n >> a >> b >> c;
	// string s1;
	// vector<string> ar(n);
	loop(i, 0, n-1) cin >> ar[i];


	ab[n]=n; bc[n]=n; ac[n]=n;
	for(int i=n-1; i>=0; i--)
	{
		ab[i] = (ar[i]=="AB" ? i : ab[i+1]);
		bc[i] = (ar[i]=="BC" ? i : bc[i+1]);
		ac[i] = (ar[i]=="AC" ? i : ac[i+1]);
	}


	if(a+b+c>=3 || a+b+c==1)
	{
		// if(a==0&&b==0 && ar[0]=="AB") cout << "No", return 0;
		// if(a==0&&c==0 && ar[0]=="AC") cout << "No", return 0;
		// if(b==0&&c==0 && ar[0]=="BC") cout << "No", return 0;
		// ok=true;
		f1();
	}
	else
	{
		f2();
	}
	if(!ok) {cout << "No"; return 0;}
	cout << "Yes\n";
	for(int i=0; i<ans.size(); i++)
	{
		if(ans[i]==1) cout << "A\n";
		if(ans[i]==2) cout << "B\n";
		if(ans[i]==3) cout << "C\n";
	}
	// else cout 
	// vector<li> n_ab(n+1, n), n_bc(n+1, n), n_ac(n+1, n);
	// vector<char> ans;
	// for(int i=0; i<3; i++)
	// {
	// 	mx[n][i] = 0;
	// 	mn[n][i] = 0;
	// }
	

	return 0;
}


Measured memory_bytes: 12492