/* May the force be with you */
#include<bits/stdc++.h>
using namespace std; 
#define ll long long
#define vi vector<int>
#define vl vector<ll> 
#define pb push_back
#define FASTANDFURIOUS ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
#define rep(i,a,b) for(ll i=a;i<b;i++)
#define For(i,n) for(ll i=0;i<n;i++)
#define MOD 1000000007
#define MAX 1000001
#define pll pair <ll,ll>
#define pii pair <int,int>
#define dbg(x)    cout << #x << ": " << x << endl;
#define read(n,v) For(i,n)cin>>v[i]
#define mxh priority_queue<int>
#define mnh priority_queue<int,vector<int>,greater<int>>
#define mkp make_pair
#define YES cout<<"YES\n";
#define NO cout<<"NO\n";
#define fi first
#define se second
#define No cout<<"No\n";
#define Yes cout<<"Yes\n";
#define endl '\n'
#define INF 1e18
 
vl fact(1001,1);

ll pow(ll x, unsigned ll y, ll p){
    ll res=1LL;
    x=x%p;
    if (x==0) return 0;
    while (y > 0){
        if (y & 1)
            res = (res*x) % p;
        y = y>>1;
        x = (x*x) % p;
    }
    return res;
}
ll _pow(int a, int b){
    if(!b)
        return 1;
    ll temp = _pow(a, b / 2);
    temp = (temp * temp);
    if(b % 2)
        return (a * temp);
    return temp;
}
ll invmod(int a,int m){
    return pow(a,m-2,m);
}
ll ncr(int n,int r){
    if(n<r)
        return 0;
    ll ans=fact[n];
    ans*=invmod(fact[n-r],MOD);
    ans%=MOD;
    ans*=invmod(fact[r],MOD);
    ans%=MOD;
    return ans;
}
ll ncr_2(ll n, ll k ){
    if (k > n) return 0;
    if (k * 2 > n) k = n-k;
    if (k == 0) return 1;
 
    ll result = n;
    for(ll i = 2; i <= k; ++i ) {
        result = result * (n-i+1);
        result /= i;
    }
    return result;
}
bool ok(int x){
    int l = sqrt(x);
    if(l*l == x){
        return true;
    }
    else{
        return false;
    }
}
signed main(){
   FASTANDFURIOUS;
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output1.txt", "w", stdout);
    #endif
    int tc=1;
    cin>>tc;
    For(t,tc){
        int n,m,x;
        cin>>n>>m>>x;
        vector<pair<int,int>> v(n);
        vi vec(m);
        For(i,n){
            cin>>v[i].fi;
            v[i].se = i;
        }
        sort(v.begin(), v.end());
        reverse(v.begin(), v.end());
        int i=0,j=0;
        // for(auto x:v){
        //     cout<<x.fi<<" ";
        // }
        vi res(n);
        while(i<n){
            if(j<0)j=0;
            if((i/m)%2==0){
                vec[j] = v[i].fi;
                res[v[i].se] = j+1;
                // cout<<v[i].se<<" "<<j+1<<endl;
                j++;
            }
            else{
                j--;
                vec[j] = v[i].fi;
                res[v[i].se] = j+1;
            }
            i++;
        }
        sort(vec.begin(), vec.end());
        if(vec[m-1]-vec[0]>x){
            cout<<"NO"<<endl;
        }
        else{
            cout<<"YES"<<endl;
            for(auto x:res){
                cout<<x<<" ";
            }
            cout<<endl;
        }
    }
}
