#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int T;
int n, k;
long long d;
int ans[N];
int mainpoint[N];
int main() {
scanf("%d", &T);
while (T--) {
ans[0] = 0;
scanf("%d%lld%d", &n, &d, &k);
if (d < n - 1) {
printf("NO\n");
continue;
}
long long sum = 0;
int cnt = 1, dep = 0;
bool flag = true;
while (flag) {
int fa = cnt;
dep++;
mainpoint[dep] = fa;
if (sum + 1ll * (n - cnt) * dep >= d) {
int now = cnt + 1, tmpcnt = 0;
for (;now <= n && sum + dep < d;now++) {
ans[++ans[0]] = fa;
sum += dep;
tmpcnt++;
}
for (;now < n;now++) {
ans[++ans[0]] = 1;
sum++;
}
ans[++ans[0]] = mainpoint[d - sum];
if (mainpoint[d - sum] == fa) tmpcnt++;
if (tmpcnt < k) flag = false;
break;
}
for (int i = 1;i <= k;i++) {
cnt++;
if (cnt > n && sum < d) {
flag = false;
break;
}
sum += dep;
ans[++ans[0]] = fa;
}
}
if (flag) {
printf("YES\n");
for (int i = 1;i < n;i++) printf("%d ", ans[i]);
printf("\n");
}
else printf("NO\n");
}
}