#include <bits/stdc++.h>
using namespace std;
int n;
int m;
double a;
double b;
double k_1;
double k_2;
vector<int> A;
inline double sqr(double t) { return t * t; }
inline double x(double B_i) { return a * B_i / b; }
inline double path_len(double A_i, double B_i) {
  return sqrt(k_1 + sqr(A_i)) + sqrt(k_2 + sqr(B_i - A_i));
}
void init() {
  cin >> n >> m >> a >> b;
  k_1 = sqr(a);
  k_2 = sqr(b - a);
  A.resize(n + 2);
  A[0] = -numeric_limits<double>::max();
  for (int i = 1; i <= n; ++i) {
    cin >> A[i];
  }
  A[n + 1] = numeric_limits<double>::max();
}
void solve() {
  vector<pair<double, int> > table(m);
  double B_i = 0;
  double curr_x = 0;
  int curr_pos = 0;
  for (int i = 0; i < m; ++i) {
    cin >> B_i;
    curr_x = x(B_i);
    while (curr_x > A[curr_pos + 1]) {
      ++curr_pos;
    }
    if (A[curr_pos + 1] - curr_x > curr_x - A[curr_pos]) {
      table[i].second = curr_pos;
    } else {
      table[i].second = curr_pos + 1;
    }
    table[i].first = path_len(A[table[i].second], B_i);
  }
  double l = 0;
  for (int i = 0; i < m; ++i) {
    cin >> l;
    table[i].first += l;
  }
  vector<pair<double, int> >::iterator result_it =
      min_element(table.begin(), table.end());
  cout << result_it->second << ' ' << (result_it - table.begin() + 1) << endl;
}
int main() {
  init();
  solve();
}
