#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/rope>

#define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
#define fb(i,a,b) for(int (i) = (a); (i) >= (b); --(i))
#define mod 998244353
#define xx first
#define yy second
#define all(a) (a).begin(), (a).end()
#define pb push_back
#define ll long long
#define pii pair<int,int>


using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>,rb_tree_tag, tree_order_statistics_node_update> ordered_set;/// find_by_order(x)(x+1th) , order_of_key() (strictly less)
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());



ll a,b,c;
int n;
string niz[200005];

vector<char> res;

void no(){
    cout << "No\n";
    exit(0);
}

int main()
{

    ios_base::sync_with_stdio(false); cin.tie(0);
    cin >> n;
    cin >> a >> b >> c;
    ll sum = a+b+c;
    ff(i,1,n){
        cin >> niz[i];
    }
    if(sum == 0){
        cout << "No\n";
        return 0;
    }
    niz[n + 1] = niz[n];
    ff(i,1,n){
        if(a < 0 || b < 0 || c < 0){
            no();
        }
        if(niz[i] == "AB"){
            if(a == 0 && b == 0){
                no();
            }
            if( a == 1 && b == 1 && c == 0){
                int sl = 0;
                if(i == n){
                    res.pb('A');
                    break;
                }
                if(niz[i + 1] == "BC"){
                    res.pb('B');
                    a--;
                    b++;
                    res.pb('C');
                    b--;
                    c++;
                    i++;
                    continue;
                }
                if(niz[i + 1] == "AB"){
                    res.pb('A');
                    res.pb('B');
                    i++;
                    continue;
                }
                if(niz[i + 1] == "AC"){
                    res.pb('A');
                    a++;
                    b--;
                    res.pb('C');
                    c++;
                    a--;
                    i++;
                    continue;
                }
            }
            else{
                if(a < b){
                    res.pb('A');
                    a++;
                    b--;
                }
                else{
                    res.pb('B');
                    b++;
                    a--;
                }
            }
            continue;
        }

        if(niz[i] == "BC"){
            ///


            if(b == 0 && c == 0){
                no();
            }
            if(b == 1 && c == 1 && a == 0){
                int sl = 0;
                if(i == n){
                    res.pb('B');
                    break;
                }
                if(niz[i + 1] == "BC"){
                    res.pb('B');
                    res.pb('C');
                    i++;
                    continue;
                }
                if(niz[i + 1] == "AB"){
                    res.pb('B');
                    res.pb('A');
                    c--;
                    a++;
                    i++;
                    continue;
                }
                if(niz[i + 1] == "AC"){
                    res.pb('C');
                    res.pb('A');
                    b--;
                    a++;
                    i++;
                    continue;
                }
            }
            else{
                if(b < c){
                    res.pb('B');
                    b++;
                    c--;
                }
                else{
                    res.pb('C');
                    c++;
                    b--;
                }
            }
            continue;
        }

        if(niz[i] == "AC"){
            ///


            if(a == 0 && c == 0){
                no();
            }
            if(a == 1 && c == 1 && b == 0){
                int sl = 0;
                if(i == n){
                    res.pb('A');
                    break;
                }
                if(niz[i + 1] == "BC"){
                    res.pb('C');
                    res.pb('B');
                    b++;
                    a--;
                    i++;
                    continue;
                }
                if(niz[i + 1] == "AB"){
                    res.pb('A');
                    res.pb('B');
                    b++;
                    c--;
                    i++;
                    continue;
                }
                if(niz[i + 1] == "AC"){
                    res.pb('A');
                    res.pb('C');
                    i++;
                    continue;

                }
            }
            else{
                if(a < c){
                    res.pb('A');
                    a++;
                    c--;
                }
                else{
                    res.pb('C');
                    c++;
                    a--;
                }
            }
            continue;
        }
    }
    if(a < 0 || b < 0 || c < 0){
        no();
    }
    cout << "Yes\n";
    for(auto c:res)cout << c << "\n";
    return 0;
}


Measured memory_bytes: 10060