#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-9;
long double Dis(long long a, long long Y, long long b, long long YY) {
  return sqrt((long double)(b - a) * (b - a) + (Y - YY) * (Y - YY));
}
struct PT {
  long long ID;
  long double len, Y;
  PT(long long _ID, long double _Y) {
    ID = _ID;
    Y = _Y;
  }
  bool operator<(const PT &a) const { return (Y < a.Y); }
};
vector<PT> A, B;
void BinSearch(vector<PT> &C, long double val, long long &low, long long &up) {
  long long i, med;
  up = C.size() - 1;
  low = 0;
  if (val >= C[up].Y) {
    low = max(up - 1, low);
    return;
  }
  if (val <= C[low].Y) {
    up = min(low + 1, up);
    return;
  }
  while ((up - low) > 1) {
    med = (up + low) / 2;
    if (C[med].Y < val)
      low = med;
    else
      up = med;
  }
}
int main() {
  long long i, n, m, a, b, temp;
  cin >> n >> m >> a >> b;
  for (i = 0; i < n; i++) {
    cin >> temp;
    A.push_back(PT(i + 1, temp));
    A[i].len = Dis(0, 0, a, temp);
  }
  for (i = 0; i < m; i++) {
    cin >> temp;
    B.push_back(PT(i + 1, temp));
  }
  for (i = 0; i < m; i++) {
    cin >> temp;
    B[i].len = temp;
  }
  sort(A.begin(), A.end());
  sort(B.begin(), B.end());
  long long ind1, ind2;
  long double ans, tmp1, tmp2, mini, tt;
  long long l, u;
  ans = 1e18;
  for (i = 0; i < m; i++) {
    tt = ((long double)a * B[i].Y) / ((long double)(b));
    BinSearch(A, tt, l, u);
    tmp1 = Dis(a, A[u].Y, b, B[i].Y) + A[u].len;
    tmp2 = Dis(a, A[l].Y, b, B[i].Y) + A[l].len;
    mini = min(tmp1, tmp2);
    if (ans > (B[i].len + mini)) {
      if ((tmp1 < tmp2))
        ind1 = A[u].ID, ans = B[i].len + tmp1;
      else
        ind1 = A[l].ID, ans = B[i].len + tmp2;
      ind2 = B[i].ID;
    }
  }
  cout << ind1 << " " << ind2 << endl;
  return 0;
}
