#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define rep(i,a,n) for(ll i=a;i<n;i++)
#define per(i,a,n) for(ll i=n-1;i>=a;i--)
#define fi first
#define se second
#define maxn 200005
#define inf 1e9
#define maxi LONG_LONG_MAX
#define mini LONG_LONG_MIN
#define sz(x) (x).size()
#define ed(x) (x).end()
#define contains(v,i) (v.find(i)!=v.end())
#define VL vector<ll>
#define all(x) (x).begin(),(x).end()
#define grt_sort(x) sort(all(x),greater<>())
#define pll pair<ll,ll>
#define um unordered_map
#define flash ios_base::sync_with_stdio(false);cin.tie(NULL);

#define sq(x) ((x)*(x))
#define cb(x) ((x)*(x)*(x))

using namespace std;

ll dp[5001][5001];

ll memo(ll l,ll r, std::vector<ll> &a, std::vector<ll> &b){
  if(l>r)
    return 0;

  if(dp[l][r]!=-1)
      return dp[l][r];

  if(l==r)
      return dp[l][r] = a[l]*b[r];

  return dp[l][r] = a[l]*b[r] + a[r]*b[l] + memo(l+1, r-1, a, b);
}

int main()
{
    flash

    ll t;
    cin>>t;

    while(t--){
      ll n,m,x;
      cin>>n>>m>>x;

      vector<pair<ll,ll>> v;
      vector<ll> res(n);

      for(ll i=0;i<n;i++){
        ll x;
        cin>>x;
        v.pb({x,i});
      }

      sort(v.begin(),v.end());

      for(ll i=n-m;i<n;i++){
          res[v[i].second]=i-n+m+1;
      }

      ll j=n-m;

      for(ll i=n-m-1;i>=0;i--){
        v[j].first+=v[i].first;

        res[v[i].second]=j-n+m+1;
        if(abs(v[j].first-v[n-1].first)<=x)
          j++;

        if(j==n)
            j=n-m;
      }

      ll valid=1, mxval=0;

      for(ll i=n-m;i<n;i++)
        mxval = max(mxval, v[i].first);

      for(ll i=n-m;i<n;i++)
      {
        if((v[i].first-mxval)>x){
          valid=0;
          break;
        }
      }

      if(valid){
        cout<<"YES\n";

        for(ll i=0;i<n;i++){
          cout<<res[i]<<" ";
        }
        cout<<"\n";
      }
      else{
        cout<<"NO\n";
      }
    }
}
