#include <bits/stdc++.h>
using namespace std;
typedef long long lol;

//マクロ
//forループ関係
//引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
//Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i,n) for(lol i=0;i<lol(n);i++)
#define REPD(i,n) for(lol i=n-1;i>=0;i--)
#define FOR(i,a,b) for(lol i=a;i<=lol(b);i++)
#define FORD(i,a,b) for(lol i=a;i>=lol(b);i--)
//xにはvectorなどのコンテナ
#define ALL(x) x.begin(),x.end() //sortなどの引数を省略したい
#define SIZE(x) lol(x.size()) //sizeをsize_tからllに直しておく
//定数
#define PI 3.1415926535897932385 //pi
#define INF 1000000000000 //10^12:極めて大きい値,∞
#define MOD 1000000007 //10^9+7:合同式の法
#define MAXR 100000 //10^5:配列の最大のrange(素数列挙などで使用)
//最大値最小値
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
int gcd(int a,int b){return b?gcd(b,a%b):a;}

#define ab 0
#define bc 1
#define ca 2

int main()
{
    string result;
    lol n; cin >> n;
    lol a, b, c; cin >> a >> b >> c;
    vector<int> ch(n);
    REP(i, n)
    {
        string s; cin >> s;
        if(s == "AB")
        {
            ch[i] = ab;
        }
        else if(s == "BC")
        {
            ch[i] = bc;
        }
        else
        {
            ch[i] = ca;
        }
        
    }
    int d = a + b + c;
    if(d == 0)
    {
        cout << "No" << endl;
        return 0;
    }
    else if(d >= 1)
    {
        REP(i, n)
        {
            if(ch[i] == ab)
            {
                if(a == 0 && b == 0)
                {
                    cout << "No" << endl;
                    return 0;
                }
                else
                {
                    if(a == 1 && b == 1 && c == 0 && ch[i+1] == ca)
                    {
                        
                        a++; b--;
                        result += 'A';
                    }
                    else if(a < b)
                    {
                        a++; b--;
                        result += 'A';
                    }
                    else
                    {
                        a--; b++;
                        result += 'B';
                    }
                    
                }
                
            }
            else if(ch[i] == bc)
            {
                if(b == 0 && c == 0)
                {
                    cout << "No" << endl;
                    return 0;
                }
                else
                {
                    if(b == 1 && c == 1 && a == 0 && ch[i+1] == ab)
                    {
                        
                        b++; c--;
                        result += 'B';
                    }
                    else if(b < c)
                    {
                        b++; c--;
                        result += 'B';
                    }
                    else
                    {
                        b--; c++;
                        result += 'C';
                    }
                }
                
            }
            else if(ch[i] == ca)
            {
                if(c == 0 && a == 0)
                {
                    cout << "No" << endl;
                    return 0;
                }
                else
                {
                    if(c == 1 && a == 1 && b == 0 && ch[i+1] == bc)
                    {
                        
                        c++; a--;
                        result += 'C';
                    }
                    else if(c < a)
                    {
                        c++; a--;
                        result += 'C';
                    }
                    else
                    {
                        c--; a++;
                        result += 'A';
                    }
                }
                
            }
        }
    }
    else
    {
        
    }
    cout << "Yes" << endl;
    REP(i, n)
    {
        cout << result[i] << endl;
    }
    return 0;
}

Measured memory_bytes: 3864