#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fll;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int m;
  cin >> m;
  while (m--) {
    int n, t, a, b;
    cin >> n >> t >> a >> b;
    vector<int> first, d, pos = {t}, dif(n);
    for (int& i : dif) cin >> i;
    for (int i = 0; i < n; i++) {
      int x;
      cin >> x;
      pos.push_back(x - 1);
      dif[i] ? d.push_back(x) : first.push_back(x);
    }
    sort(first.begin(), first.end()), sort(d.begin(), d.end()),
        sort(pos.begin(), pos.end());
    int ans = 0;
    for (int lim : pos) {
      long long i =
          upper_bound(first.begin(), first.end(), lim) - first.begin();
      long long j = upper_bound(d.begin(), d.end(), lim) - d.begin();
      long long falta = lim - (i * a + j * b);
      if (falta < 0) continue;
      long long add = min(((long long)first.size() - i) * a, falta) / a;
      falta -= add * a;
      long long add2 = min(((long long)d.size() - j) * b, falta) / b;
      ans = max((long long)ans, i + j + add + add2);
    }
    cout << ans << '\n';
  }
  exit(0);
}
