#include <iostream>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int main()
{
    int N;
    long long A, B, C;
    cin >> N >> A >> B >> C;
    vector<string> vec(N);
    for (int i = 0; i < N; ++i)
    {
        cin >> vec[i];
    }
    long long X = A + B + C;
    vector<char> res;
    if (X == 0)
    {
        cout << "No" << endl;
        return 0;
    }
    else if (X == 1)
    {
        for (auto v : vec)
        {
            if (v == "AB")
            {
                if (A == 1) --A, ++B, res.push_back('B');
                else if (B == 1) ++A, --B, res.push_back('A');
                else { cout << "No" << endl; return 0;}
            }
            else if (v == "AC")
            {
                if (A == 1) --A, ++C, res.push_back('C');
                else if (C == 1) ++A, --C, res.push_back('A');
                else { cout << "No" << endl; return 0;}
            }
            else // "BC"
            {
                if (B == 1) --B, ++C, res.push_back('C');
                else if (C == 1) ++B, --C, res.push_back('B');
                else { cout << "No" << endl; return 0;}
            }    
        }   
    }
    else // X >= 2
    {
        // 初手で Yes, No が決まるのでチェック
        if (vec[0] == "AB")
        {
            if (A == 0 && B == 0)
            {
                cout << "No" << endl;
                return 0;
            }
        }
        else if (vec[0] == "AC")
        {
            if (A == 0 && C == 0)
            {
                cout << "No" << endl;
                return 0;
            }
        }
        else // "BC"
        {
            if (C == 0 && B == 0)
            {
                cout << "No" << endl;
                return 0;
            }
        }

        // Yes の場合、各ターンごとの戦略を考えて、resにpush
        for (int i = 0; i < N; ++i)
        {
            if (vec[i] == "AB")
            {
                if (A == 0 && B > 0)
                {
                    ++A, --B;
                    res.push_back('A');
                }
                else if (A > 0 && B == 0)
                {
                    --A, ++B;
                    res.push_back('B');
                }
                else if (X == 2 && A == 1 && B == 1 && i != N - 1 && vec[i] != vec[i + 1])
                {
                    if (vec[i + 1] == "AC")
                    {
                        ++A, --B;
                        res.push_back('A');
                    }
                    else // "BC"
                    {
                        --A, ++B;
                        res.push_back('B');
                    }
                }
                else
                {
                    if (A >= B)
                    {
                        --A, ++B;
                        res.push_back('B');
                    }
                    else
                    {
                        ++A, --B;
                        res.push_back('A');
                    }
                }  
            }
            else if (vec[i] == "AC")
            {
                if (A == 0 && C > 0)
                {
                    ++A, --C;
                    res.push_back('A');
                }
                else if (A > 0 && C == 0)
                {
                    --A, ++C;
                    res.push_back('C');
                }
                else if (X == 2 && A == 1 && C == 1 && i != N - 1 && vec[i] != vec[i + 1])
                {
                    if (vec[i + 1] == "AB")
                    {
                        ++A, --C;
                        res.push_back('A');
                    }
                    else // "BC"
                    {
                        --A, ++C;
                        res.push_back('C');
                    }
                }
                else
                {
                    if (A >= C)
                    {
                        --A, ++C;
                        res.push_back('C');
                    }
                    else
                    {
                        ++A, --C;
                        res.push_back('A');
                    }
                }  
            }
            else // "BC"
            {
                if (B == 0 && C > 0)
                {
                    ++B, --C;
                    res.push_back('B');
                }
                else if (B > 0 && C == 0)
                {
                    --B, ++C;
                    res.push_back('C');
                }
                else if (X == 2 && B == 1 && C == 1 && i != N - 1 && vec[i] != vec[i + 1])
                {
                    if (vec[i + 1] == "AB")
                    {
                        ++B, --C;
                        res.push_back('B');
                    }
                    else // "AC"
                    {
                        --B, ++C;
                        res.push_back('C');
                    }
                }
                else
                {
                    if (B >= C)
                    {
                        --B, ++C;
                        res.push_back('C');
                    }
                    else
                    {
                        ++B, --C;
                        res.push_back('B');
                    }
                }  
            }
        }
    }
    cout << "Yes" << endl;
    for (auto r : res)
    {
        cout << r << endl;
    }
    return 0;
}


Measured memory_bytes: 6720