/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
import java.util.*;
import java.io.*;
class Solution{
class Node{
int val;
int pos;
Node(int pos, int val){
this.val = val;
this.pos = pos;
}
}
public static void main
(String arg
[]){ Scanner sc
= new Scanner
(System.
in);
int testcase = sc.nextInt();
for(int t = 0;t<testcase;t++){
int N = sc.nextInt();
int X = sc.nextInt();
int arr[] = new int [N];
for(int i=0;i<N;i++){
arr[i] = sc.nextInt();
}
Solution s = new Solution();
System.
out.
print("Case #"+(t
+1)+" "); s.Solve(N,X,arr);
}
}
public void Solve(int N, int X, int arr[]){
Map
<Integer,ArrayList
> q
= new HashMap
<>();
for(int i=0;i<N;i++){
int num = arr[i]/X;
//q.add();
if(q.containsKey(num)){
q.get(num).add(i);;
}else{
q.put(num, new ArrayList<>());
q.get(num).add(i);
}
}
for (Map.
Entry<Integer, ArrayList
> entry
: q.
entrySet()) { //System.out.println(entry.getKey() + ":" + entry.getValue().toString());
for(int i=0;i<q.get(entry.getKey()).size();i++){
System.
out.
print(((int)q.
get(entry.
getKey()).
get(i
)+1)+" "); }
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5pby4qOwoKY2xhc3MgU29sdXRpb257CiAgICBjbGFzcyBOb2RlewogICAgICAgIGludCB2YWw7CiAgICAgICAgaW50IHBvczsKICAgICAgICBOb2RlKGludCBwb3MsIGludCB2YWwpewogICAgICAgICAgICB0aGlzLnZhbCA9IHZhbDsKICAgICAgICAgICAgdGhpcy5wb3MgPSBwb3M7CiAgICAgICAgfQogICAgICAgIAogICAgfQogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ1tdKXsKICAgICAgICBTY2FubmVyIHNjICA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgCiAgICAgICAgaW50IHRlc3RjYXNlID0gc2MubmV4dEludCgpOwogICAgICAgIAogICAgICAgIGZvcihpbnQgdCA9IDA7dDx0ZXN0Y2FzZTt0KyspewogICAgICAgICAgICBpbnQgTiA9IHNjLm5leHRJbnQoKTsKICAgICAgICAgICAgaW50IFggPSBzYy5uZXh0SW50KCk7CiAgICAgICAgICAgIGludCBhcnJbXSA9IG5ldyBpbnQgW05dOwogICAgICAgICAgICAKICAgICAgICAgICAgZm9yKGludCBpPTA7aTxOO2krKyl7CiAgICAgICAgICAgICAgICBhcnJbaV0gPSBzYy5uZXh0SW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU29sdXRpb24gcyA9IG5ldyBTb2x1dGlvbigpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJDYXNlICMiKyh0KzEpKyIgIik7CiAgICAgICAgICAgIHMuU29sdmUoTixYLGFycik7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgU29sdmUoaW50IE4sIGludCBYLCBpbnQgYXJyW10pewogICAgCQogICAgICAgIE1hcDxJbnRlZ2VyLEFycmF5TGlzdD4gcSA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAKICAgICAgICBmb3IoaW50IGk9MDtpPE47aSsrKXsKICAgICAgICAJaW50IG51bSA9IGFycltpXS9YOwogICAgICAgIAkvL3EuYWRkKCk7CiAgICAgICAgCWlmKHEuY29udGFpbnNLZXkobnVtKSl7CiAgICAgICAgCQlxLmdldChudW0pLmFkZChpKTs7CiAgICAgICAgCX1lbHNlewogICAgICAgIAkJcS5wdXQobnVtLCBuZXcgQXJyYXlMaXN0PD4oKSk7CiAgICAgICAgCQlxLmdldChudW0pLmFkZChpKTsKICAgICAgICAJfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBmb3IgKE1hcC5FbnRyeTxJbnRlZ2VyLCBBcnJheUxpc3Q+IGVudHJ5IDogcS5lbnRyeVNldCgpKSB7CiAgICAJCS8vU3lzdGVtLm91dC5wcmludGxuKGVudHJ5LmdldEtleSgpICsgIjoiICsgZW50cnkuZ2V0VmFsdWUoKS50b1N0cmluZygpKTsKICAgIAkJCiAgICAJCWZvcihpbnQgaT0wO2k8cS5nZXQoZW50cnkuZ2V0S2V5KCkpLnNpemUoKTtpKyspewogICAgCQkJCVN5c3RlbS5vdXQucHJpbnQoKChpbnQpcS5nZXQoZW50cnkuZ2V0S2V5KCkpLmdldChpKSsxKSsiICIpOwogICAgCQl9CgkJfQogICAgICAgIAogICAgICAgIAogICAgfQp9