#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const int M = 100005;
struct node {
  int num, y;
};
node A[N], B[N];
int a, b;
double len(int y1, int y2) {
  return sqrt(1.0 * y1 * y1 + 1.0 * a * a) +
         sqrt(1.0 * (y2 - y1) * (y2 - y1) + 1.0 * (a - b) * (a - b));
}
bool cmp(node a, node b) { return a.y < b.y; }
int half(int y2, int n) {
  int l = 0, r = n + 1, mid = l, midmid = r;
  while (mid < midmid) {
    mid = (l + r) / 2;
    midmid = (mid + r) / 2;
    if (len(A[mid].y, y2) > len(A[midmid].y, y2))
      l = mid;
    else
      r = midmid;
  }
  return mid;
}
int main() {
  int i, j, k;
  int n, m, tt, t;
  int x, y;
  while (scanf("%d%d%d%d", &n, &m, &a, &b) != EOF) {
    for (i = 1; i <= n; i++) scanf("%d", &A[i].y), A[i].num = i;
    sort(A + 1, A + n, cmp);
    for (i = 1; i <= m; i++) scanf("%d", &B[i].y), B[i].num = i;
    double Min = (double)1000000007 * 1000000007, ans;
    for (i = 1; i <= m; i++) {
      scanf("%d", &k);
      t = half(B[i].y, n);
      ans = len(A[t].y, B[i].y) + k;
      if (ans < Min) Min = ans, x = A[t].num, y = i;
    }
    printf("%d %d\n", x, y);
  }
  return 0;
}
