#include <iostream>
#include <fstream>
#include <algorithm>
#include <iomanip>
#include <random>
#include <ctime>
#include <bitset>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <cmath>
#include <cstring>
#include <queue>
#include <deque>
#include <stack>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define ld long double
#define ull unsigned long long
#define ll long long
#define pb push_back
#define pii pair<int, int>
#define pll pair<ll, ll>
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define fast_io cout.tie(0), cin.tie(0), ios_base::sync_with_stdio(0)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
using namespace std;
//using namespace __gnu_pbds;
//typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
ld eps = (ld)1 / 1e9;
ll inf = 1e18, mod2 = 998244353, mod1 = 1e9 + 7;
ll sqr(ll a) { return a * a; }
ll qb(ll a) { return a * a * a; }
ll gcd(ll a, ll b) { return !a ? b : gcd(b % a, a); }
ll binpow(ll a, ll b, ll mod) { return b ? (b % 2 ? (a * (sqr(binpow(a, b / 2, mod)) % mod)) % mod : sqr(binpow(a, b / 2, mod)) % mod) : 1; }
ll binmult(ll a, ll b, ll mod) { return b ? (b % 2 ? (2 * binmult(a, b / 2, mod) + a) % mod : (2 * binmult(a, b / 2, mod)) % mod) : 0; }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
string str[100001];

int main()
{
    fast_io;
    ll n, a, b, c, i;
    vector<char> vc;
    cin >> n >> a >> b >> c;
    for (i = 1; i <= n; i++) cin >> str[i];
    for (i = 1; i <= n; i++)
    {
        if (str[i] == "AB")
        {
            if (a >= b)
            {
                if (i < n && str[i + 1] == "AC" && a == 1 && !c) a++, b--, vc.pb('A');
                else b++, a--, vc.pb('B');
            }
            else
            {
                if (i < n && str[i + 1] == "BC" && b == 1 && !c) b++, a--, vc.pb('B');
                else a++, b--, vc.pb('A');
            }
        }
        else if (str[i] == "BC")
        {
            if (b < c)
            {
                if (i < n && str[i + 1] == "AC" && c == 1 && !a) c++, b--, vc.pb('C');
                else b++, c--, vc.pb('B');
            }
            else
            {
                if (i < n && str[i + 1] == "AB" && b == 1 && !a) b++, c--, vc.pb('B');
                else c++, b--, vc.pb('C');
            }
        }
        else
        {
            if (a < c)
            {
                if (i < n && str[i + 1] == "BC" && c == 1 && !b) c++, a--, vc.pb('C');
                else a++, c--, vc.pb('A');
            }
            else
            {
                if (i < n && str[i + 1] == "AB" && a == 1 && !b) a++, c--, vc.pb('A');
                else c++, a--, vc.pb('C');
            }
        }
        if (a < 0 || b < 0 || c < 0) cout << "No", exit(0);
    }
    cout << "Yes\n";
    for (auto f: vc) cout << f << '\n';
    return 0;
}

Measured memory_bytes: 6860