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

// repetition
#define FOR(i, a, b) for(ll i = (a); i < (b); ++i)
#define rep(i, n) for(ll i = 0; i < (ll)(n); i++)

// container util
#define all(x) (x).begin(), (x).end()

// typedef
typedef long long ll;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<ll> VLL;
typedef vector<VLL> VVLL;
typedef vector<string> VS;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;

// const value
// const ll MOD = 1e9 + 7;
// const int dx[] = {0,1,0,-1};//{0,0,1,1,1,-1,-1,-1};
// const int dy[] = {1,0,-1,0};//{1,-1,0,1,-1,0,1,-1};

// conversion
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
inline ll toLL(string s) {
  ll v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T> inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}

template <typename T1, typename T2> inline bool chmax(T1 &a, T2 b) {
  return a < b && (a = b, true);
}

template <typename T1, typename T2> inline bool chmin(T1 &a, T2 b) {
  return a > b && (a = b, true);
}
vector<char> ans;
ll a, b, c, sum;

bool check(int ccmd, int ncmd) {
  assert(sum == (a + b + c));
  // cout << a << " " << b << " " << c << endl;
  // if(ccmd == 0) {
  //   cout << "AB" << endl;
  // }
  // if(ccmd == 1) {
  //   cout << "BC" << endl;
  // }
  // if(ccmd == 2) {
  //   cout << "AC" << endl;
  // }
  // 最後の処理
  if(ncmd == -1) {
    if(ccmd == 0) {
      if(a > 0) {
        ans.push_back('B');
        return true;
      }
      if(b > 0) {
        ans.push_back('A');
        return true;
      }
      return false;
    }
    if(ccmd == 1) {
      if(b > 0) {
        ans.push_back('C');
        return true;
      }
      if(c > 0) {
        ans.push_back('B');
        return true;
      }
      return false;
    }
    if(ccmd == 2) {
      if(a > 0) {
        ans.push_back('C');
        return true;
      }
      if(c > 0) {
        ans.push_back('A');
        return true;
      }
      return false;
    }
  }
  // 途中
  if(ccmd == 0) {
    if(a == 0 && b == 0) {
      return false;
    }

    if(a == 0) {
      ans.push_back('A');
      a++, b--;
      return true;
    }
    if(b == 0) {
      ans.push_back('B');
      b++, a--;
      return true;
    }
    //次のクエリに含まれる方に渡す
    if(ncmd == 2) {
      ans.push_back('A');
      a++, b--;
      return true;
    }
    if(ncmd == 1) {
      ans.push_back('B');
      b++, a--;
      return true;
    }
    if(ncmd == 0) {
      if(b < a) {
        ans.push_back('B');
        b++, a--;
      } else {
        ans.push_back('A');
        a++, b--;
      }
      return true;
    }
  }

  if(ccmd == 1) {
    if(c == 0 && b == 0)
      return false;
    if(c == 0) {
      ans.push_back('C');
      c++, b--;
      return true;
    }
    if(b == 0) {
      ans.push_back('B');
      b++, c--;
      return true;
    }
    //次のクエリに含まれる方に渡す
    if(ncmd == 0) {
      ans.push_back('B');
      b++, c--;
      return true;
    }
    if(ncmd == 2) {
      ans.push_back('C');
      c++, b--;
      return true;
    }
    if(ncmd == 1) {
      if(b < c) {
        ans.push_back('B');
        b++, c--;
      } else {
        ans.push_back('C');
        c++, b--;
      }
      return true;
    }
  }

  if(ccmd == 2) {
    if(c == 0 && a == 0)
      return false;
    if(c == 0) {
      ans.push_back('C');
      c++, a--;
      return true;
    }
    if(a == 0) {
      ans.push_back('A');
      a++, c--;
      return true;
    }
    //次のクエリに含まれる方に渡す
    if(ncmd == 0) {
      ans.push_back('A');
      a++, c--;
      return true;
    }
    if(ncmd == 1) {
      ans.push_back('C');
      c++, a--;
      return true;
    }
    if(ncmd == 2) {
      if(c < a) {
        ans.push_back('C');
        c++, a--;
      } else {
        ans.push_back('A');
        a++, c--;
      }

      return true;
    }
  }
  assert("error" && false);
  return false;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;

  cin >> a >> b >> c;
  sum = a + b + c;
  vector<string> cmd(n);
  rep(i, n) cin >> cmd[i];

  map<string, int> mp;
  mp["AB"] = 0;
  mp["BC"] = 1;
  mp["AC"] = 2;
  bool flag = true;
  rep(i, n) {
    // 次のクエリを考えて両方が0にならないように動く
    if(i == n - 1)
      flag = check(mp[cmd[i]], -1);
    else
      flag = check(mp[cmd[i]], mp[cmd[i + 1]]);

    // cout << ans.back() << " -> " << a << " " << b << " " << c << endl;
    if(flag == false) {
      cout << "No"
           << "\n";
      return 0;
    }
  }
  cout << "Yes"
       << "\n";
  rep(i, ans.size()) { cout << ans[i] << endl; }
  return 0;
}


Measured memory_bytes: 6624