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

#define lli long long int
#define REP(i,s,n) for(int i=s;i<n;i++)
#define NUM 2520
#define INF (1LL<<50)
#define DEBUG 0
#define mp(a,b) make_pair(a,b)
#define SORT(V) sort(V.begin(),V.end())
#define PI (3.141592653589794)
#define TO_STRING(VariableName) # VariableName
#define LOG(x) if(DEBUG)cout<<TO_STRING(x)<<"="<<x<<" "<<endl;
#define LOG2(x,y) if(DEBUG)cout<<TO_STRING(x)<<"="<<x<<" "<<TO_STRING(y)<<"="<<y<<endl;
#define LOG3(x,y,z) if(DEBUG)cout<<TO_STRING(x)<<"="<<x<<" "<<TO_STRING(y)<<"="<<y<<" "<<TO_STRING(z)<<"="<<z<<endl;
#define LOG4(w,x,y,z) if(DEBUG)cout<<TO_STRING(w)<<"="<<w<<" "<<TO_STRING(x)<<"="<<x<<" "<<TO_STRING(y)<<"="<<y<<" "<<TO_STRING(z)<<"="<<z<<endl;

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; }


const string YES = "Yes";
const string NO = "No";

char cross(string A,string B){
    if(A=="AB"){
        if(B=="BC")return 'B';
        else return 'A';
    }
    if(A=="BC"){
        if(B=="AB")return 'B';
        else return 'C';
    }
    if(A=="AC"){
        if(B=="AB")return 'A';
        else return 'C';
    }
}

char noCross(string A,string B){
    if(A=="AB"){
        if(B=="BC")return 'A';
        else return 'B';
    }
    if(A=="BC"){
        if(B=="AB")return 'C';
        else return 'B';
    }
    if(A=="AC"){
        if(B=="AB")return 'C';
        else return 'A';
    }
}

void func(long long N, long long A, long long B, long long C, std::vector<std::string> s){

    map<char,lli> cnt;
    cnt['A']=A;
    cnt['B']=B;
    cnt['C']=C;

    vector<char> ans;
    REP(i,0,N-1){
        LOG4(i,cnt['A'],cnt['B'],cnt['C']);
        if(cnt[s[i][0]]==0 && cnt[s[i][1]]==0){
            cout<<NO<<endl;
            return;
        }
        if(s[i]==s[i+1]){
            if(cnt[s[i][0]] >= cnt[s[i][1]]){
                cnt[s[i][0]]--;
                cnt[s[i][1]]++;
                ans.push_back(s[i][1]);
            }
            else{
                cnt[s[i][0]]++;
                cnt[s[i][1]]--;
                ans.push_back(s[i][0]);        
            }
        }
        else{
            char t = cross(s[i],s[i+1]);
            char noT = noCross(s[i],s[i+1]);
            LOG3(i,t,noT);
            LOG2(s[i],s[i+1])
            if(cnt[noT]!=0){
                cnt[t]++;
                cnt[noT]--;
                ans.push_back(t);
            }
            else{
                ans.push_back(noT);
                cnt[noT]++;
                cnt[t]--;
            }
        }
    }

    if(cnt[s[N-1][0]]==0 && cnt[s[N-1][1]]==0){
        cout<<NO<<endl;
        return;
    }
    if(cnt[s[N-1][0]] <= cnt[s[N-1][1]]){
        ans.push_back(s[N-1][0]);
    }
    else{
        ans.push_back(s[N-1][1]);
    }

   
        cout<<"Yes"<<endl;
        REP(i,0,ans.size()){
            cout<<ans[i]<<endl;
        }
    


}

int main(){
    // cout << fixed << setprecision(5);

    long long N;
    scanf("%lld",&N);
    long long A;
    scanf("%lld",&A);
    long long B;
    scanf("%lld",&B);
    long long C;
    scanf("%lld",&C);
    std::vector<std::string> s(N);
    for(int i = 0 ; i < N ; i++){
        std::cin >> s[i];
    }
    func(N, A, B, C, std::move(s));
    return 0;
}


Measured memory_bytes: 6820