#include <bits/stdc++.h>   using namespace std;   template <typename... Ts>   void do_nothing(Ts &&...vals) {}   constexpr long long MOD = 1000000007;   constexpr int INF = 0x7f7f7f7f;   constexpr double EPS = 1e-8;   long long fastPow(long long num, long long exp, long long modNum) {     if (exp == 0) return 1;     if (exp == 1)       return num;     else {       long long half = fastPow(num, exp / 2, modNum) % modNum;       if (exp % 2 == 1) {         return (((half * half) % modNum) * num) % modNum;       } else {         return (half * half) % modNum;       }     }   }   long long fastPow(long long num, long long exp) {     if (exp == 0) return 1;     if (exp == 1)       return num;     else {       long long half = fastPow(num, exp / 2);       if (exp % 2 == 1) {         return (((half * half)) * num);       } else {         return (half * half);       }     }   }   long long getReverse(long long y, long long modNum) {     return fastPow(y, modNum - 2, modNum) % modNum;   }   long long gcd(long long a, long long b) {     if (a < b) swap(a, b);     return (a % b == 0) ? b : gcd(b, a % b);   }   int main(int argn, char **argv) {     ios::sync_with_stdio(false);     cout.tie(nullptr);     cin.tie(nullptr);     const long long MOD = 1e9 + 7;     int T = 1;     cin >> T;     for (int(I) = (0); (I) <= ((T)-1); (I)++) {       long long n, x, y;       cin >> n >> x >> y;       vector<long long> arr(n);       vector<stack<long long>> places(n + 2);       for (int(i) = (0); (i) <= ((n)-1); (i)++) {         cin >> arr[i];         places[arr[i]].emplace(i);       }       priority_queue<pair<long long, long long>> pq;       long long except;       for (int(i) = (1); (i) <= (n + 1); (i)++) {         if (places[i].size() == 0) {           except = i;         } else {           pq.emplace(places[i].size(), i);         }       }       vector<long long> ans(n, 0);       for (int(i) = (0); (i) <= ((x)-1); (i)++) {         auto pa = pq.top();         pq.pop();         long long idx = places[pa.second].top();         places[pa.second].pop();         ans[idx] = pa.second;         pq.emplace(places[pa.second].size(), pa.second);       }       y -= x;       vector<long long> pos, val;       if (!pq.empty()) {         auto pa = pq.top();         pq.pop();         for (int(i) = (0); (i) <= ((pa.first) - 1); (i)++) {           val.emplace_back(pa.second);         }         while (!pq.empty()) {           auto next = pq.top();           pq.pop();           for (int(i) = (0); (i) <= ((next.first) - 1); (i)++) {             pos.emplace_back(places[next.second].top());             places[next.second].pop();             val.emplace_back(next.second);           }         }         for (int(i) = (0); (i) <= ((pa.first) - 1); (i)++) {           pos.emplace_back(places[pa.second].top());           places[pa.second].pop();         }       }       long long excount = n - x - y, id = 0;       while (y > 0) {         ans[pos[id]] = val[id];         if (ans[pos[id]] == arr[pos[id]]) {           if (excount > 0) {             excount--;             ans[pos[id]] = 0;           } else {             break;           }         } else {           y--;         }         id++;       }       if (y > 0) {         cout <<  NO  << endl;         continue;       }       cout <<  YES  << endl;       for (int(i) = (0); (i) <= ((n)-1); (i)++) {         if (ans[i] != 0) {           cout << ans[i] <<    ;         } else {           cout << except <<    ;         }       }       cout << endl;       ;     }     return 0;   }