import sys import math import bisect def printfl(*args, **kwargs): print(*args, **kwargs) sys.stdout.flush() T = int(input()) for t in range(1, T+1): N, K = [int(_) for _ in input().split()] X = [int(_) for _ in input().split()] tmp = [(X[i], i) for i in range(N)] tmp.sort() sorted_locs = [None for i in range(N)] for i in range(N): sorted_locs[tmp[i][1]] = i X.sort() ans_right = [None for i in range(N)] ans_left = [None for i in range(N)] ans = [None for i in range(N)] ans_left[0] = 1 for i in range(1, N): if X[i] == X[i-1]: ans_left[i] = ans_left[i-1] + 1 else: ans_left[i] = 1 next_on_left = bisect.bisect_right(X, X[i]-K) - 1 if next_on_left >= 0: ans_left[i] += ans_left[next_on_left] ans_right[N-1] = 1 for i in range(N-2, -1, -1): if X[i] == X[i+1]: ans_right[i] = ans_right[i+1] + 1 else: ans_right[i] = 1 next_on_right = bisect.bisect_left(X, X[i]+K) if next_on_right <= N-1: ans_right[i] += ans_right[next_on_right] for i in range(N): ans[i] = ans_left[i] + ans_right[i] - 1 ans_to_print = ' '.join([str(ans[sorted_locs[i]]) for i in range(N)]) print(f"Case #{t}: {ans_to_print}")