#include <bits/stdc++.h>
using namespace std;
int niz[200200];
int pozovi(int poz, int n, int p, int k) {
  while (true) {
    if (p < niz[poz] || poz > n) return poz - k;
    p -= niz[poz];
    poz += k;
  }
}
int main() {
  int t, n, p, k, poz, pozf, pozmax;
  cin >> t;
  while (t--) {
    cin >> n >> p >> k;
    for (int i = 1; i <= n; i++) cin >> niz[i];
    sort(niz + 1, niz + n + 1);
    pozmax = 0;
    for (poz = 1; poz <= k; poz++) {
      if (niz[poz] > p) break;
      pozf = pozovi(poz, n, p, k);
      if (pozf > pozmax) pozmax = pozf;
    }
    cout << pozmax << endl;
  }
}
