#include <bits/stdc++.h>
using namespace std;
int l[105000];
typedef struct {
  int r, len;
} RIGHT_POINT;
RIGHT_POINT r[105000];
int n, m, a, b;
double cal(double y) {
  double OA = hypot(a, y);
  double ret = 1e20;
  for (int i = 1; i <= m; i++) {
    double dis = hypot(b - a, r[i].r - y) + r[i].len;
    if (ret - 1e-6 > dis) ret = dis;
  }
  return OA + ret;
}
int get_point(double val) {
  int index = 1;
  for (int i = 1; i <= n; i++) {
    if (fabs(val - l[index]) > fabs(val - l[i])) index = i;
  }
  return index;
}
int main() {
  int left_point;
  double max_ret = 1e20;
  scanf("%d%d%d%d", &n, &m, &a, &b);
  for (int i = 1; i <= n; i++) scanf("%d", &l[i]);
  for (int i = 1; i <= m; i++) scanf("%d", &r[i].r);
  for (int i = 1; i <= m; i++) scanf("%d", &r[i].len);
  int low = 1, high = n;
  while (low <= high) {
    int mid = (low + high) >> 1;
    int midmid = (mid + high) >> 1;
    double mid_ret = cal(l[mid]);
    double midmid_ret = cal(l[midmid]);
    if (mid_ret + 1e-6 < max_ret) {
      max_ret = mid_ret;
      left_point = mid;
    }
    if (midmid_ret + 1e-6 < max_ret) {
      max_ret = midmid_ret;
      left_point = midmid;
    }
    if (mid_ret <= midmid_ret)
      high = midmid - 1;
    else
      low = mid + 1;
  }
  double ret = 1e20;
  int right_point = -1;
  for (int i = 1; i <= m; i++)
    if (ret - 1e-6 > hypot(b - a, r[i].r - l[left_point]) + r[i].len) {
      ret = hypot(b - a, r[i].r - l[left_point]) + r[i].len;
      right_point = i;
    }
  printf("%d %d\n", left_point, right_point);
  return 0;
}
