#include <bits/stdc++.h>
using namespace std;
vector<int> leftY;
int rightY[100001], rightDistance[100001];
int m, n, a, b;
inline double pointToPoint(int x1, int y1, int x2, int y2) {
  return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
}
inline double pointToBegin(int x1, int y1) {
  return pointToPoint(0, 0, x1, y1);
}
double lly(double x1, double y1, double x2, double y2, double x3, double y3,
           double x4, double y4) {
  return ((x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4)) /
         ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4));
}
double tellDistance(int i, int lb) {
  if (lb <= 0 || lb >= n + 1) return 66666666666;
  return rightDistance[i] + pointToPoint(a, leftY[lb], b, rightY[i]) +
         pointToBegin(a, leftY[lb]);
}
int main(void) {
  int bestL(-666), bestR(-666), tmp;
  double bestDistance(66666666666), actDistance;
  leftY.push_back(-666666666);
  scanf("%d%d%d%d", &n, &m, &a, &b);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &tmp);
    leftY.push_back(tmp);
  }
  for (int i = 0; i < m; ++i) scanf("%d", &rightY[i]);
  for (int i = 0; i < m; ++i) scanf("%d", &rightDistance[i]);
  for (int i = 0; i < m; ++i) {
    int bestWhere(lly(0, 0, b, rightY[i], a, 0, a, 1) + 0.5);
    int lb = lower_bound(leftY.begin(), leftY.end(), bestWhere) - leftY.begin();
    lb -= 3;
    for (int j = 0; j < 7; ++j, ++lb) {
      actDistance = tellDistance(i, lb);
      if (bestDistance > actDistance) {
        bestDistance = actDistance;
        bestL = lb;
        bestR = i + 1;
      }
    }
  }
  printf("%d %d\n", bestL, bestR);
  return 0;
}
