#include <bits/stdc++.h>
using namespace std;
// template <class X>
#define mod 1000000007
#define modc 998244353
#define ll long long
#define ull unsigned long long
#define vi vector<int>
#define vl vector<ll>
#define vul vector<ull>
#define fr(i,n) for(int i=0;i<n;i++)
#define pb push_back
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define ret return
const double pi = 3.14159265359;

/*struct compare
{
public:
    bool operator()(pair<int,int> &p1,pair<int,int> &p2)
    {
        if(p1.second-p1.first > p2.second-p2.first)
          return false;
        
       else if(p1.second-p1.first == p2.second-p2.first)
         {
             return p1.first > p2.first;
         }
        
        return true;
        
    
    }
    priority_queue<pair<int,int>,vector<pair<int,int>>,compare> q;
};
*/



//vector<vector<ll>> fac(1001,vector<ll>(1001,1));

void nCr()
{
    vector<vector<ll>> fac(1001,vector<ll>(1001,1));
      for (int i = 0; i <= 1000; i++) 
       {
            for (int j = 0; j <= i; j++) 
            {
                if (j == 0 || j == i)
                    fac[i][j] = 1;
                else
                    fac[i][j] = (fac[i - 1][j - 1] + fac[i - 1][j])%mod;
            }
        }
}
ll apowb(ll a,ll b)  // complexity O(logB); 
{
    ll ans = 1;
    
    while(b > 0)
    {
        if(b%2 == 0)
          ans = (ans*a)%mod;
        a = (a*a)%mod;
        b = b/2;
    }
      
    return ans;
}

ll sub(ll a,ll b)
{
    
   ret ((a+mod)%mod - (b+mod)%mod)%mod;

}

ll mul(ll a,ll b)
{
    ret ((a+mod)%mod * (b+mod)%mod)%mod;
}

ll sum(ll a, ll b)
{
     ret ((a+mod)%mod + (b+mod)%mod)%mod;
}


void solve(){
    int n,m,x;
    cin>>n>>m>>x;
    
    vector<stack<int>> vec(x+1);
    
    int p;
    
    vector<int> a;

    fr(i,n){
        cin>>p;
        vec[p].push(i);
        a.pb(p);
    }
    
    sort(a.rbegin(),a.rend());
    
    int q = 0;
   
   set<pair<int,int>> st;
   
    vi sum(m);
    vi ans(n);
   
   fr(i,m){
       st.insert({0,i});
   }
   
  // int p,q;
   int in;
   fr(i,n){

       p = st.begin()->first;
       q = st.begin()->second; // tower
       st.erase(st.begin());
       

       in = vec[a[i]].top();  // block
        vec[a[i]].pop();

        
        sum[q] = sum[q]+a[i];
        st.insert({sum[q],q});
        ans[in] = q+1;


   }
   
    
    fr(i,m-1){
        //sum[i]
        if(abs(sum[i]-sum[i+1]) > x){
              no;
              ret ;
          }
    }
    
    
    yes;
    
    fr(i,n){
        cout<<ans[i]<<" ";
    }
    cout<<endl;
   
   
}
int main()
{
    ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
       int t = 1;
      cin>>t;
      while(t--)
         solve();
	return 0;
}