#include <bits/stdc++.h> using namespace std; using ll = long long; void solve() { int n, k; cin >> n >> k; vector<ll> vs(n); vector<bool> taken(n); for(auto &x : vs) { cin >> x; } sort(vs.begin(), vs.end()); int ads = 0; int curr = 0; int cc = 0; { // triples int p0 = 0; int p1 = n - 1; int p2 = n - 1; while(true) { while(p0 < n && taken[p0]) { ++ p0; } if(p0 >= n) { break; } int a = vs[p0]; /* curr += a; ++ cc; */ taken[p0] = true; while(p1 >= 0 && (taken[p1] || vs[p1] + a >= k)) { -- p1; } taken[p0] = false; if(p1 < 0) { break; } int b = vs[p1]; /* curr += b; ++ cc; */ taken[p1] = taken[p0] = true; while(p2 >= 0 && taken[p2]) { -- p2; } taken[p1] = taken[p0] = false; if(p2 < 0) { break; } int c = vs[p2]; ++ ads; curr = 0; cc = 0; taken[p2] = taken[p1] = taken[p0] = true; } } bool last_small = false; {//pairs int p0 = 0; int p1 = n - 1; while(true) { while(p0 < n && taken[p0]) { ++ p0; } if(p0 >= n || vs[p0] >= k) { break; } taken[p0] = true; last_small = true; while(p1 >= 0 && taken[p1]) { -- p1; } if(p1 < 0) { break; } taken[p1] = true; last_small = false; ++ ads; } } // Singles for(int i = 0; i < n; ++ i) { if(!taken[i]) { ++ ads; } } // No final ad if(!last_small) { -- ads; } cout << ads << '\n'; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while(t --) { solve(); } }