#include <bits/stdc++.h>   using namespace std;   string rem(string second) {     if (second[second.size() - 1] ==   r ) second.erase(second.size() - 1);     return second;   }   vector<string> split(string second, char delim) {     replace(second.begin(), second.end(), delim,    );     stringstream ss(second);     string buf;     vector<string> v;     while (ss >> buf) v.push_back(buf);     return v;   }   long long fpowm(long long x, unsigned long long y,                   unsigned long long p = LLONG_MAX) {     long long res = 1;     x = x % p;     if (x == 0) return 0;     while (y > 0) {       if (y & 1) res = (res * x) % p;       y = y >> 1;       x = (x * x) % p;     }     return res;   }   inline vector<int> ints(int x) {     vector<int> A(x);     for (int i = 0; i < (x); i++) cin >> A[i];     return A;   }   inline vector<long long> lls(int x) {     vector<long long> A(x);     for (int i = 0; i < (x); i++) cin >> A[i];     return A;   }   inline vector<string> strs(int x) {     vector<string> A(x);     for (int i = 0; i < (x); i++) cin >> A[i];     return A;   }   struct chsh {     static uint64_t splitmix64(uint64_t x) {       x += 0x9e3779b97f4a7c15;       x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;       x = (x ^ (x >> 27)) * 0x94d049bb133111eb;       return x ^ (x >> 31);     }     size_t operator()(uint64_t x) const {       static const uint64_t FIXED_RANDOM =           chrono::steady_clock::now().time_since_epoch().count();       return splitmix64(x + FIXED_RANDOM);     }   };   const int MOD = 1000000007;   const double EPS = 1e-6;   const int MAXN = -1;   int tc() {     int N;     cin >> N;     vector<int> A = ints(3);     string B;     cin >> B;     vector<pair<int, char>> ans;     int R[3];     std::memset(R, 0, sizeof R);     for (int i = 0; i < (N); i++) {       if (B[i] ==  R ) {         if (A[1]) ans.push_back({i,  P }), A[1]--, R[1]++;       } else if (B[i] ==  P ) {         if (A[2]) ans.push_back({i,  S }), A[2]--, R[2]++;       } else {         if (A[0]) ans.push_back({i,  R }), A[0]--, R[0]++;       }     }     if (2 * (int)ans.size() < N) return !(cout <<  NO n );     cout <<  YES n ;     vector<char> rem;     for (int i = 0; i < (3); i++)       for (int j = 0; j < (A[i]); j++) {         if (!i)           rem.push_back( R );         else if (i == 1)           rem.push_back( P );         else if (i == 2)           rem.push_back( S );       }     string ret(N,  ~ );     for (auto first : ans) {       ret[first.first] = first.second;     }     for (int i = 0; i < (N); i++) {       if (ret[i] ==  ~ ) {         ret[i] = rem.front();         rem.erase(rem.begin());       }     }     cout << ret <<   n ;     return 0;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     int T;     cin >> T;     while (T--) tc();     return 0;   }   