#include<bits/stdc++.h>
using namespace std;
using ll = long long;
vector<vector<int>> paths[205];
void Solve() {
int i, j, k;
int n, m;
cin >> n >> m;
assert(4<=n && n<=100000);
assert(20<=m && m<=200);
vector<int> cost(n);
for (i = 0; i < n; ++i) {
cin >> cost[i];
assert(0<=cost[i] && cost[i]<=1e9);
}
vector<int> nodes;
int ans = -1;
for (i = 1; i < n; ++i) nodes.push_back(i);
do {
ll path_cost = (cost[0]^cost[nodes[0]]) + (cost[0]^cost[nodes.back()]);
for (i = 1; i < nodes.size(); ++i) path_cost += cost[nodes[i]]^cost[nodes[i-1]];
path_cost %= m;
paths[path_cost].push_back(nodes);
if (paths[path_cost].size()>2) {
ans = path_cost;
break;
}
} while (next_permutation(nodes.begin(), nodes.end()));
if (ans == -1) {
cout << "No" << endl;
} else {
cout << "YES" << endl;
for (i = 0; i < 3; ++i) {
cout << 1;
for (j = 0; j < paths[ans][i].size(); ++j) {
cout << " " << paths[ans][i][j]+1;
}
cout << " " << 1 << endl;
}
}
for (i = 0; i < m; ++i) paths[i].clear();
}
int main() {
int t;
cin >> t;
assert(1<=t && t<=25000);
while (t--) Solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbGwgPSBsb25nIGxvbmc7Cgp2ZWN0b3I8dmVjdG9yPGludD4+IHBhdGhzWzIwNV07Cgp2b2lkIFNvbHZlKCkgewogIGludCBpLCBqLCBrOwogIGludCBuLCBtOwoKICBjaW4gPj4gbiA+PiBtOwogIGFzc2VydCg0PD1uICYmIG48PTEwMDAwMCk7CiAgYXNzZXJ0KDIwPD1tICYmIG08PTIwMCk7CiAgdmVjdG9yPGludD4gY29zdChuKTsKICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICBjaW4gPj4gY29zdFtpXTsKICAgIGFzc2VydCgwPD1jb3N0W2ldICYmIGNvc3RbaV08PTFlOSk7CiAgfQoKICB2ZWN0b3I8aW50PiBub2RlczsKICBpbnQgYW5zID0gLTE7CiAgZm9yIChpID0gMTsgaSA8IG47ICsraSkgbm9kZXMucHVzaF9iYWNrKGkpOwoKICBkbyB7CiAgICBsbCBwYXRoX2Nvc3QgPSAoY29zdFswXV5jb3N0W25vZGVzWzBdXSkgKyAoY29zdFswXV5jb3N0W25vZGVzLmJhY2soKV0pOwogICAgZm9yIChpID0gMTsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSBwYXRoX2Nvc3QgKz0gY29zdFtub2Rlc1tpXV1eY29zdFtub2Rlc1tpLTFdXTsKICAgIHBhdGhfY29zdCAlPSBtOwogICAgcGF0aHNbcGF0aF9jb3N0XS5wdXNoX2JhY2sobm9kZXMpOwogICAgaWYgKHBhdGhzW3BhdGhfY29zdF0uc2l6ZSgpPjIpIHsKICAgICAgYW5zID0gcGF0aF9jb3N0OwogICAgICBicmVhazsKICAgIH0KICB9IHdoaWxlIChuZXh0X3Blcm11dGF0aW9uKG5vZGVzLmJlZ2luKCksIG5vZGVzLmVuZCgpKSk7CgogIGlmIChhbnMgPT0gLTEpIHsKICAgIGNvdXQgPDwgIk5vIiA8PCBlbmRsOwogIH0gZWxzZSB7CiAgICBjb3V0IDw8ICJZRVMiIDw8IGVuZGw7CiAgICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7CiAgICAgIGNvdXQgPDwgMTsKICAgICAgZm9yIChqID0gMDsgaiA8IHBhdGhzW2Fuc11baV0uc2l6ZSgpOyArK2opIHsKICAgICAgICBjb3V0IDw8ICIgIiA8PCBwYXRoc1thbnNdW2ldW2pdKzE7CiAgICAgIH0KICAgICAgY291dCA8PCAiICIgPDwgMSA8PCBlbmRsOwogICAgfQogIH0KCiAgZm9yIChpID0gMDsgaSA8IG07ICsraSkgcGF0aHNbaV0uY2xlYXIoKTsKfQoKaW50IG1haW4oKSB7CiAgaW50IHQ7CiAgY2luID4+IHQ7CiAgYXNzZXJ0KDE8PXQgJiYgdDw9MjUwMDApOwogIHdoaWxlICh0LS0pIFNvbHZlKCk7Cn0K