#include <bits/stdc++.h>
using namespace std;
const int size1 = 1e6 + 500;
const long long mod = 1000 * 1000 * 1000 + 7;
const long long mod2 = 100003;
const long long mod1 = 2764443;
const long double pi = acos(-1);
const long double eps = 1e-9;
const int INF = 1e9;
static long long h[size1];
static unsigned long long h1[size1];
static long long deg[size1];
static unsigned long long deg1[size1];
void build_hash(string& s) {
  deg[0] = 1;
  deg1[0] = 1;
  h[0] = s[0] - 'a';
  h1[0] = s[0] - 'a';
  for (int i = 1; i < s.size(); ++i) {
    deg[i] = (deg[i - 1] * 29) % mod;
    deg1[i] = (deg1[i - 1] * 31);
    h[i] = (h[i - 1] * 29 + s[i] - 'a') % mod;
    h1[i] = (h1[i - 1] * 31 + s[i] - 'a');
  }
}
std::pair<long long, long long> get(int l, int r, string& s) {
  if (l == 0) {
    return {h[r], h1[r]};
  }
  return {((h[r] - (h[l - 1] * deg[r - l + 1])) % mod + mod) % mod,
          ((h1[r] - (h1[l - 1] * deg1[r - l + 1])))};
}
long long check(int l, int r, int per, string& s) {
  for (int pos = l; pos <= r; pos += per) {
    for (int j = 0; j < per; ++j) {
      if (s[pos + j] != s[l + j]) {
        return false;
      }
    }
  }
  return true;
}
int n, m;
bool can(char c) { return c != '#'; }
void dfs(int x, int y, vector<string>& s, vector<vector<bool>>& used) {
  used[x][y] = true;
  if (x > 0 && can(s[x - 1][y]) && !used[x - 1][y]) {
    dfs(x - 1, y, s, used);
  }
  if (y > 0 && can(s[x][y - 1]) && !used[x][y - 1]) {
    dfs(x, y - 1, s, used);
  }
  if (x < n - 1 && can(s[x + 1][y]) && !used[x + 1][y]) {
    dfs(x + 1, y, s, used);
  }
  if (y < m - 1 && can(s[x][y + 1]) && !used[x][y + 1]) {
    dfs(x, y + 1, s, used);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout.precision(20);
  int t;
  cin >> t;
  while (t--) {
    int n;
    int x, y;
    cin >> n >> x >> y;
    vector<int> b(n);
    vector<bool> us(n + 1);
    vector<vector<int>> pos(n + 1);
    for (int i = 0; i < n; ++i) {
      cin >> b[i];
      --b[i];
      us[b[i]] = true;
      pos[b[i]].push_back(i);
    }
    int c;
    for (int i = 0; i < n + 1; ++i) {
      if (!us[i]) {
        c = i;
      }
    }
    set<pair<int, int>> st;
    for (int i = 0; i < n + 1; ++i) {
      st.insert({pos[i].size(), i});
    }
    vector<int> ans(n);
    for (int i = 0; i < n; ++i) {
      ans[i] = -1;
    }
    for (int i = 0; i < x; ++i) {
      auto el = *(--st.end());
      int pk = el.second;
      ans[pos[pk].back()] = pk;
      pos[pk].pop_back();
      st.erase(el);
      st.insert({el.first - 1, el.second});
    }
    y -= x;
    int m = n - x;
    while (!st.empty() && st.begin()->first == 0) {
      st.erase(st.begin());
    }
    auto st1 = st;
    int cnt = 0;
    while (!st.empty()) {
      auto el = *(--st.end());
      int pk = el.first;
      while (pk != 0) {
        auto el1 = *(st1.begin());
        if (el1.second == el.second) {
          if (st1.size() == 1) {
            break;
          }
          st1.erase(el1);
          auto el2 = *st1.begin();
          for (int j = 0; j < pk; ++j) {
            ans[pos[el2.second].back()] = el.second;
            pos[el2.second].pop_back();
          }
          st1.erase(el2);
          if (el2.first != pk) {
            st1.insert({el2.first - pk, el2.second});
          }
          pk = 0;
          st1.insert(el1);
          continue;
        }
        if (el1.first > pk) {
          for (int j = 0; j < pk; ++j) {
            ans[pos[el1.second].back()] = el.second;
            pos[el1.second].pop_back();
          }
          st1.erase(el1);
          st1.insert({el1.first - pk, el1.second});
          pk = 0;
        } else {
          for (int j = 0; j < el1.first; ++j) {
            ans[pos[el1.second].back()] = el.second;
            pos[el1.second].pop_back();
          }
          st1.erase(el1);
          pk -= el1.first;
        }
      }
      cnt += el.first - pk;
      if (pk == 0) {
        st.erase(el);
        continue;
      }
      if (pk != 0) {
        st.erase(el);
        continue;
      }
    }
    if (cnt < y) {
      cout << "NO\n";
      continue;
    }
    cout << "YES\n";
    for (int i = 0; i < n; ++i) {
      if (ans[i] == -1) {
        ans[i] = c;
      } else {
        if (ans[i] != b[i] && cnt - y > 0) {
          --cnt;
          ans[i] = c;
        }
      }
    }
    for (int el : ans) {
      cout << el + 1 << ' ';
    }
    cout << "\n";
  }
  return 0;
}
