#include<bits/stdc++.h>

using namespace std;

const int N=1e5+5;
int n,dp[N][4][4][4],a,b,z;
char c[N][4][4][4];
tuple<int,int,int>g[N][4][4][4];
string s[N];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n>>a>>b>>z;
    a=min(a,3),b=min(b,3),z=min(z,3);
    dp[0][a][b][z]=1;
    for(int i=1;i<=n;i++) cin>>s[i];
    for(int i=0;i<n;i++)
    {
        string now=s[i+1];
        for(int x=0;x<=3;x++)
        {
            for(int y=0;y<=3;y++)
            {
                for(int z=0;z<=3;z++)
                {
                    if(!dp[i][x][y][z]) continue;
                    if(now=="AB")
                    {
                        if(y)
                        {
                            dp[i+1][min(x+1,3)][y-1][z]=1;
                            g[i+1][min(x+1,3)][y-1][z]=make_tuple(x,y,z);
                            c[i+1][min(x+1,3)][y-1][z]='A';
                        }
                        if(x)
                        {
                            dp[i+1][x-1][min(y+1,3)][z]=1;
                            g[i+1][x-1][min(y+1,3)][z]=make_tuple(x,y,z);
                            c[i+1][x-1][min(y+1,3)][z]='B';
                        }
                    }
                    else if(now=="BC")
                    {
                        if(y)
                        {
                            dp[i+1][x][y-1][min(z+1,3)]=1;
                            g[i+1][x][y-1][min(z+1,3)]=make_tuple(x,y,z);
                            c[i+1][x][y-1][min(z+1,3)]='C';
                        }
                        if(z)
                        {
                            dp[i+1][x][min(y+1,3)][z-1]=1;
                            g[i+1][x][min(y+1,3)][z-1]=make_tuple(x,y,z);
                            c[i+1][x][min(y+1,3)][z-1]='B';
                        }
                    }
                    else if(now=="AC")
                    {
                        if(x)
                        {
                            dp[i+1][x-1][y][min(z+1,3)]=1;
                            g[i+1][x-1][y][min(z+1,3)]=make_tuple(x,y,z);
                            c[i+1][x-1][y][min(z+1,3)]='C';
                        }
                        if(z)
                        {
                            dp[i+1][min(x+1,3)][y][z-1]=1;
                            g[i+1][min(x+1,3)][y][z-1]=make_tuple(x,y,z);
                            c[i+1][min(x+1,3)][y][z-1]='A';
                        }
                    }
                }
            }
        }
    }
    tuple<int,int,int>chose;
    bool kt=false;
    for(int i=0;i<=3;i++)
    {
        for(int j=0;j<=3;j++)
        {
            for(int k=0;k<=3;k++)
            {
                if(dp[n][i][j][k])
                {
                    chose=make_tuple(i,j,k);
                    kt=true;
                }
            }
        }
    }
    if(!kt) return cout<<"No",0;
    cout<<"Yes"<<'\n';
    vector<char>res;
    int ni,nj,nk;
    tie(ni,nj,nk)=chose;
    while(n)
    {
        int i,j,k;
        tie(i,j,k)=g[n][ni][nj][nk];
        res.push_back(c[n][ni][nj][nk]);
        ni=i;
        nj=j;
        nk=k;
        n--;
    }
    reverse(res.begin(),res.end());
    for(auto&x:res) cout<<x<<'\n';
}


Measured memory_bytes: 113120