#include<bits/stdc++.h>
#define rep(i,a,...) for(int i = (a)*(strlen(#__VA_ARGS__)!=0);i<(int)(strlen(#__VA_ARGS__)?__VA_ARGS__:(a));++i)
#define per(i,a,...) for(int i = (strlen(#__VA_ARGS__)?__VA_ARGS__:(a))-1;i>=(int)(strlen(#__VA_ARGS__)?(a):0);--i)
#define foreach(i, n) for(auto &i:(n))
#define pii pair<int, int>
#define pll pair<long long, long long>
#define all(x) (x).begin(), (x).end()
#define bit(x) (1ll << (x))
using ll = long long;
//const ll MOD = (ll)1e9+7;
const ll MOD = 998244353;
const int INF = (ll)1e9+7;
const ll INFLL = (ll)1e18;
using namespace std;
template<class t>
using vvector = vector<vector<t>>;
template<class t>
using vvvector = vector<vector<vector<t>>>;
template<class t>
using priority_queuer = priority_queue<t, vector<t>, greater<t>>;
template<class t, class u> bool chmax(t &a, u b){if(a<b){a=b;return true;}return false;}
template<class t, class u> bool chmin(t &a, u b){if(a>b){a=b;return true;}return false;}
#ifdef DEBUG
#define debug(x) cout<<"LINE "<<__LINE__<<": "<<#x<<" = "<<x<<endl;
#else
#define debug(x) (void)0
#endif

namespace templates{
  ll modpow(ll x, ll b){
    ll res = 1;
    while(b){
      if(b&1)res = res * x % MOD;
      x = x * x % MOD;
      b>>=1;
    }
    return res;
  }

  ll modinv(ll x){
    return modpow(x, MOD-2);
  }

  bool was_output = false;
  template<class t>
  void output(t a){
    if(was_output)cout << " ";
    cout << a;
    was_output = true;
  }
  void outendl(){
    was_output = false;
    cout << endl;
  }
  ll in(){
    ll res;
    scanf("%lld", &res);
    return res;
  }

  template<class t>
  istream& operator>>(istream&is, vector<t>&x){
    for(auto &i:x)is >> i;
    return is;
  }

  template<class t, class u>
  istream& operator>>(istream&is, pair<t, u>&x){
    is >> x.first >> x.second;
    return is;
  }

  template<class t>
  void in(t&x){
    cin >> x;
  }

  template<class t>
  t in(){
    t res; cin >> res; return res;
  }

  template<class t>
  void out(t x){
    cout << x;
  }

  template<class t>
  vector<t> sorted(vector<t> line,function<bool(t,t)> comp=[](t a,t b){return a<b;}){
    sort(line.begin(),line.end(),comp);
    return line;
  }

  template<class t>
  vector<t> reversed(vector<t> line){
    reverse(line.begin(),line.end());
    return line;
  }
}

using namespace templates;

int str2val(string str){
  if(str=="AB")return 0;
  if(str=="AC")return 1;
  if(str=="BC")return 2;
  return -1;
}

int toint(int a,int b,int c){
  a = min(a,3);
  b = min(b,3);
  c = min(c,3);
  return a * 16 + b * 4 + c;
}

int n;
vector<int> order;

bool isok(int place,int a,int b,int c){
  static vvector<int> dp(n,vector<int>(toint(3,3,3),0));
  if(place==n){
    return true;
  }
  int &res = dp[place][toint(a,b,c)];
  if(res)return res==2?true:false;
  if(order[place]==0){
    if(a==0 and b==0){
      res = 1;
      return false;
    }
    for(int i=-1;i<=1;i+=2){
      int na = a + i;
      int nb = b - i;
      if(na<0 or nb<0)continue;
      if(isok(place+1,na,nb,c)){
        res = 2;
        return true;
      }
    }
    res = 1;
    return false;
  }
  if(order[place]==1){
    if(a==0 and c==0){
      res = 1;
      return false;
    }
    for(int i=-1;i<=1;i+=2){
      int na = a + i;
      int nc = c - i;
      if(na<0 or nc<0)continue;
      if(isok(place+1,na,b,nc)){
        res = 2;
        return true;
      }
    }
    res = 1;
    return false;
  }
  if(order[place]==2){
    if(b==0 and c==0){
      res = 1;
      return false;
    }
    for(int i=-1;i<=1;i+=2){
      int nb = b + i;
      int nc = c - i;
      if(nb<0 or nc<0)continue;
      if(isok(place+1,a,nb,nc)){
        res = 2;
        return true;
      }
    }
    res = 1;
    return false;
  }
}

void func(int place,int a,int b,int c){
  if(place==n){
    return;
  }
  if(order[place]==0){
    for(int i=-1;i<=1;i+=2){
      int na = a+i;
      int nb = b-i;
      if(na<0 or nb<0)continue;
      if(isok(place+1,na,nb,c)){
        if(i==1){
          cout << "A" << endl;
        }else{
          cout << "B" << endl;
        }
        func(place+1,na,nb,c);
        return;
      }
    }
    return;
  }
  if(order[place]==1){
    for(int i=-1;i<=1;i+=2){
      int na = a+i;
      int nc = c-i;
      if(na<0 or nc<0)continue;
      if(isok(place+1,na,b,nc)){
        if(i==1){
          cout << "A" << endl;
        }else{
          cout << "C" << endl;
        }
        func(place+1,na,b,nc);
        return;
      }
    }
    return;
  }
  if(order[place]==2){
    for(int i=-1;i<=1;i+=2){
      int nb = b+i;
      int nc = c-i;
      if(nb<0 or nc<0)continue;
      if(isok(place+1,a,nb,nc)){
        if(i==1){
          cout << "B" << endl;
        }else{
          cout << "C" << endl;
        }
        func(place+1,a,nb,nc);
        return;
      }
    }
    return;
  }
}
int main(){
  n = in();
  int a = in();
  int b = in();
  int c = in();
  order.resize(n);
  foreach(i,order)i=str2val(in<string>());
  if(!a+!b+!c>=2){
    if(!isok(0,a,b,c)){
      cout << "No" << endl;
      return 0;
    }
  }
  cout << "Yes" << endl;
  func(0,a,b,c);
}


Measured memory_bytes: 42148