#include <iostream> #include <vector> #include <algorithm> int main() { int t; std::cin >> t; while (t--) { int n, k; std::cin >> n >> k; int q = 0; auto v = std::vector<int>(n); for (auto &x : v) { std::cin >> x; } auto used = std::vector<bool>(n); std::sort(v.begin(), v.end()); int l = 0; int r = n; int s = n; while (l < r && l < s) { while (l < r - 1 && used[l]) { l += 1; } while (r - 1 > l && (v[l] + v[r - 1] >= k || used[r - 1])) { r -= 1; } if (r - 1 == l) { break; } used[l] = true; used[r - 1] = true; // std::cout << "using " << l << ' ' << r - 1 << '\n'; while (s - 1 >= 0 && used[s - 1]) { s -= 1; } if (s - 1 <= l) { // std::cout << l << ' ' << r - s1 << '\n'; q += 1; goto done; } // std::cout << l << ' ' << r - 1 << ' ' << s - 1 << '\n'; q += 1; used[s - 1] = true; // std::cout << "using " << s - 1 << '\n'; l += 1; r -= 1; s -= 1; } // phase 2: pairs of 2 while (l < s) { while (l < s - 1 && used[l]) { l += 1; } if (l >= s - 1) { break; } while (s - 1 >= 0 && used[s - 1]) { s -= 1; } if (s - 1 <= l) { // std::cout << l << '\n'; q += 1; goto done; } if (v[l] >= k) { break; } used[l] = true; used[s - 1] = true; // std::cout << "using " << l << ' ' << s - 1 << '\n'; // std::cout << l << ' ' << s - 1 << '\n'; q += 1; l += 1; s -= 1; } // phase 3: individual while (l < n) { if (!used[l]) { // std::cout << l << '\n'; q += 1; } l += 1; } done:; std::cout << q - 1 << '\n'; } }