#include <bits/stdc++.h>
using namespace std;
double sqr(double x) { return x * x; }
struct CPoint {
  double x, y, n, l;
  double length() { return sqrt(sqr(x) + sqr(y)); }
};
CPoint a[100100], b[100100];
double length(CPoint p1, CPoint p2) {
  return sqrt(sqr(p1.x - p2.x) + sqr(p1.y - p2.y));
}
double calc(CPoint X, CPoint Y) { return X.length() + length(X, Y) + Y.l; }
int b_search(CPoint X, int l, int r) {
  if (r - l <= 10) {
    int i = -1;
    double v = 100000000, tmp;
    for (; l <= r; l++) {
      tmp = calc(a[l], X);
      if (tmp < v) {
        v = tmp;
        i = l;
      }
    }
    return i;
  }
  int mid = (l + r) / 2;
  double p1 = calc(a[mid - 1], X);
  double p2 = calc(a[mid], X);
  double p3 = calc(a[mid + 1], X);
  if (p2 <= p3 && p2 <= p1) {
    int i = b_search(X, l, mid);
    int j = b_search(X, mid, r);
    if (calc(a[i], X) < calc(a[j], X)) return i;
    return j;
  }
  if (p1 <= p2 && p2 <= p3) return b_search(X, l, mid);
  return b_search(X, mid, r);
}
int main() {
  int N, M, i, j;
  double A, B;
  scanf("%d%d%lf%lf", &N, &M, &A, &B);
  for (i = 0; i < N; i++) {
    scanf("%lf", &a[i].y);
    a[i].x = A;
    a[i].n = i + 1;
  }
  for (i = 0; i < M; i++) {
    scanf("%lf", &b[i].y);
    b[i].x = B;
    b[i].n = i + 1;
  }
  for (i = 0; i < M; i++) scanf("%lf", &b[i].l);
  double v = 1000000000;
  int ii = -1, jj = -1;
  for (i = 0; i < M; i++) {
    j = b_search(b[i], 0, N - 1);
    if (v > calc(a[j], b[i])) {
      jj = i + 1;
      ii = j + 1;
      v = calc(a[j], b[i]);
    }
  }
  printf("%d %d", ii, jj);
  return 0;
}
