#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <string.h>
#include <bitset>
#include <random>

#define pb push_back
#define mp make_pair
#define fst first
#define snd second
#define ll long long
#define forn(i, n) for (int i = 0; i < (int) (n); i++)
#define forlr(i, l, r) for (int i = (int) l; i <= (int) (r); i++)
#define forrl(i, r, l) for (int i = (int) r; i >= (int) (l); i--)
#define sz(x) (int) ((x).size())


#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops")
#pragma GCC optimize("no-stack-protector,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

using namespace std;

const int MAX_N = 200001;
const ll INF = 2000000000ll;
const ll LLINF = 1000000000000000000ll;
const int MOD = 1000000007;  //  998244353;


int a[MAX_N];
vector<int> vs[MAX_N];
int res[MAX_N];

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
//    freopen("a.in", "rt", stdin);
//    freopen("a.out", "wt", stdout);

    cout.precision(10);
    cout << fixed;

    int t;
    cin >> t;

    forn(tt, t) {
        int n, m, x;
        cin >> n >> m >> x;
        forn(i, n) {
            cin >> a[i];
        }
        set<pair<int, int>> s;
        forn(i, m) {
            s.insert({0, i});
        }
        forn(i, n) {
            int h = s.begin()->fst;
            int id = s.begin()->snd;
            s.erase(s.begin());
            s.insert({a[i] + h, id});
            res[i] = id + 1;
        }

        cout << "YES\n";
        forn(i, n) {
            cout << res[i] << " ";
        }
        cout << "\n";
    }


    return 0;
}