#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;
}
