#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
template <class T>
T gcd(T a, T b) {
  return ((b == 0) ? a : gcd(b, a % b));
}
void solve() {
  int n, p, k;
  cin >> n >> p >> k;
  int a[n + 1];
  for (int i = (int)(1); i < (int)(n + 1); i++) cin >> a[i];
  sort(a + 1, a + n + 1);
  pair<int, int> dp[n + 1][2];
  for (int i = 0; i < (int)(n + 1); i++)
    for (int j = 0; j < (int)(2); j++) dp[i][j] = {0, 0};
  dp[0][0] = {1, p};
  dp[0][1] = {1, p};
  for (int i = (int)(1); i < (int)(n + 1); i++) {
    int f = 1;
    if (dp[i - 1][0].second >= a[i]) {
      dp[i][0].first |= dp[i - 1][0].first;
      dp[i][0].second = dp[i - 1][0].second - a[i];
      f = 0;
    }
    if (dp[i - 1][1].second >= a[i]) {
      if (dp[i - 1][1].first &&
          (f || (dp[i][0].second <= (dp[i - 1][1].second - a[i])))) {
        dp[i][0].first |= dp[i - 1][1].first;
        dp[i][0].second = dp[i - 1][1].second - a[i];
        f = 0;
      }
    }
    int f1 = 1;
    if (i >= k && dp[i - k][1].second >= a[i]) {
      dp[i][1].first |= dp[i - k][1].first;
      dp[i][1].second = dp[i - k][1].second - a[i];
      f1 = 0;
    }
    if (i >= k && dp[i - k][0].second >= a[i]) {
      if (dp[i - k][0].first &&
          (f1 || (dp[i][1].second <= (dp[i - k][0].second - a[i])))) {
        dp[i][1].first |= dp[i - k][0].first;
        dp[i][1].second = dp[i - k][0].second - a[i];
      }
    }
  }
  int ans = 0;
  for (int i = 0; i < (int)(n + 1); i++) {
    if (dp[i][0].first || dp[i][1].first) ans = i;
  }
  cout << ans << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int t;
  cin >> t;
  while (t--) solve();
  return 0;
}
