#include <bits/stdc++.h>
using namespace std;
void readInput() {}
void solve() {}
priority_queue<pair<int, int>> pq;
int n, x, y, res, a[100004], b[100004], T, cnt, vitri[100004];
vector<int> pos[100004], ans;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  readInput();
  solve();
  cin >> T;
  while (T--) {
    cin >> n >> x >> y;
    for (int i = 1; i <= n + 1; i++) {
      pos[i].clear();
      b[i] = 0;
      vitri[i] = 0;
    }
    ans.clear();
    while (!pq.empty()) pq.pop();
    for (int i = 1; i <= n; i++) cin >> a[i], pos[a[i]].push_back(i);
    cnt = 1;
    for (int i = 1; i <= n + 1; i++) {
      pq.push({pos[i].size(), i});
      if (pos[i].size() == 0) res = i;
    }
    while (cnt <= x) {
      pair<int, int> u = pq.top();
      pq.pop();
      b[pos[u.second].back()] = u.second;
      vitri[pos[u.second].back()] = 1;
      pos[u.second].pop_back();
      cnt++;
      pq.push({pos[u.second].size(), u.second});
    }
    pair<int, int> u = pq.top();
    if (2 * u.first > n - x + n - y) {
      cout << "NO" << '\n';
      continue;
    } else {
      cout << "YES" << '\n';
      for (int i = 1; i <= n + 1; i++) {
        for (auto v : pos[i]) ans.push_back(v);
      }
      cnt = 1;
      for (int i = 0; i < ans.size(); i++) {
        b[ans[i]] = a[ans[(i + ans.size() / 2) % (ans.size())]];
      }
      cnt = 1;
      for (int i = 1; i <= n; i++) {
        if (vitri[i] == 0 && b[i] == a[i]) {
          vitri[i] = 1;
          cnt++;
          b[i] = res;
        }
      }
      for (int i = 1; i <= n; i++) {
        if (vitri[i] == 0 && cnt <= n - y) b[i] = res, cnt++;
      }
      for (int i = 1; i <= n; i++) cout << b[i] << " ";
      cout << '\n';
    }
  }
}
