#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
struct node {
  double h;
  int no;
  bool operator<(node a) const { return h < a.h; }
};
set<node> g;
double b[N], l[N];
int n, ax, bx, m;
double dist(double x1, double y1, double x2, double y2) {
  return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
void init() {
  cin >> n >> m >> ax >> bx;
  for (int i = 0; i < n; i++) {
    node t;
    cin >> t.h;
    t.no = i + 1;
    g.insert(t);
  }
  for (int i = 0; i < m; i++) cin >> b[i];
  for (int i = 0; i < m; i++) cin >> l[i];
  double dis = 1e18;
  int s, t;
  set<node>::iterator p;
  for (int i = 0; i < m; i++) {
    node tt;
    tt.h = b[i] / bx * ax;
    p = g.lower_bound(tt);
    if (p != g.end()) {
      double tmp = dist(0, 0, ax, (*p).h) + dist(ax, (*p).h, bx, b[i]) + l[i];
      if (tmp < dis) {
        dis = tmp;
        s = (*p).no;
        t = i;
      }
    }
    if (p != g.begin()) {
      p--;
      double tmp = dist(0, 0, ax, (*p).h) + dist(ax, (*p).h, bx, b[i]) + l[i];
      if (tmp < dis) {
        dis = tmp;
        s = (*p).no;
        t = i;
      }
    }
  }
  cout << s << " " << t + 1 << endl;
}
int main() {
  init();
  return 0;
}
