#include <bits/stdc++.h>
using namespace std;
const double EPSILON = 0.00000001;
bool mycmp(double a, double b) { return (abs(a - b) < EPSILON); }
class Vector {
 public:
  double x;
  double y;
  double z;
  Vector() : x(0), y(0), z(0) {}
  Vector(double _x, double _y, double _z = 0) : x(_x), y(_y), z(_z){};
  Vector operator*(const Vector &v) const {
    return Vector((v.y * z) - (v.z * y), (v.z * x) - (v.x * z),
                  (v.x * y) - (v.y * x));
  }
  double dotProd(const Vector &v) const { return x * v.x + y * v.y + z * v.z; }
  Vector operator*(const double &d) const {
    return Vector(x * d, y * d, z * d);
  }
  Vector operator/(const double &d) const {
    return Vector(x / d, y / d, z / d);
  }
  Vector operator-(const Vector &v) const {
    return Vector(x - v.x, y - v.y, z - v.z);
  }
  Vector operator+(const Vector &v) const {
    return Vector(x + v.x, y + v.y, z + v.z);
  }
  bool operator<(const Vector &v) const {
    if (x != v.x) return x < v.x;
    if (y != v.y) return y < v.y;
    return z < v.z;
  }
  double dist(Vector v) const {
    return sqrt(pow(abs(x - v.x), 2) + pow(abs(y - v.y), 2) +
                pow(abs(z - v.z), 2));
  }
  bool operator==(const Vector &v) const {
    return (mycmp(x, v.x) && mycmp(y, v.y) && mycmp(z, v.z));
  }
  bool operator!=(const Vector &v) const { return !(*this == v); }
  double length() const {
    return hypot(hypot(x, y), z);
    return sqrt(x * x + y * y + z * z);
  }
};
istream &operator>>(istream &stream, Vector &v) {
  stream >> v.x >> v.y;
  return stream;
}
ostream &operator<<(ostream &stream, const Vector &v) {
  stream << '(' << v.x << ',' << v.y << ')';
  return stream;
}
class Segment {
 public:
  Vector p1, p2;
  Segment() {}
  Segment(double x1, double y1, double x2, double y2) {
    p1.x = x1;
    p1.y = y1;
    p2.x = x2;
    p2.y = y2;
  }
  Segment(const Vector &a, const Vector &b) : p1(a), p2(b) {}
  bool isParallel(const Segment &s) {
    Vector l1(p2 - p1);
    Vector l2(s.p2 - s.p1);
    return mycmp((l1 * l2).z, 0);
  }
  bool sameSide(const Vector &a, const Vector &b) const {
    return (((p2 - p1) * (a - p1)).z * ((p2 - p1) * (b - p1)).z >= 0);
  }
  bool segIntersect(const Segment &a) const {
    return ((!sameSide(a.p1, a.p2) && !a.sameSide(p1, p2)) || onSegment(a.p1) ||
            onSegment(a.p2) || a.onSegment(p1) || a.onSegment(p2));
  }
  Vector lineIntersect(Segment a) const {
    double i;
    if (a.p2.y - a.p1.y == 0)
      i = (a.p1.y - p1.y) / (p2.y - p1.y);
    else if (a.p2.x - a.p1.x == 0)
      i = (a.p1.x - p1.x) / (p2.x - p1.x);
    else {
      double equ3_2 = (((a.p2.x - a.p1.x) / (a.p2.y - a.p1.y)) * a.p1.y) -
                      a.p1.x -
                      ((p1.y * ((a.p2.x - a.p1.x) / (a.p2.y - a.p1.y))) - p1.x);
      i = equ3_2 / (((p2.y - p1.y) * ((a.p2.x - a.p1.x) / (a.p2.y - a.p1.y))) -
                    (p2.x - p1.x));
    }
    return Vector(p1.x + (p2.x - p1.x) * i, p1.y + (p2.y - p1.y) * i);
  }
  double length() const { return p1.dist(p2); }
  bool onSegment(Vector p) const {
    return mycmp(p.dist(p1) + p.dist(p2), length());
  }
  double lineDist(Vector p) const {
    return ((p - p1) * (p2 - p1)).length() / (p2 - p1).length();
  }
  double segDist(Vector p) const {
    double prod = Vector(p2 - p1).dotProd(p - p1);
    if (0 <= prod && prod <= length() * length()) {
      return lineDist(p);
    }
    return min(p1.dist(p), p2.dist(p));
  }
};
int main() {
  int n, m, a, b;
  cin >> n >> m >> a >> b;
  Segment leftLine(Vector(a, 0), Vector(a, 100));
  vector<int> left(n);
  vector<int> right(m);
  vector<int> d(m);
  for (int i = 0; i < n; i++) cin >> left[i];
  for (int i = 0; i < m; i++) cin >> right[i];
  for (int i = 0; i < m; i++) cin >> d[i];
  double bestsum = -1;
  pair<int, int> bestp;
  for (int i = 0; i < m; i++) {
    Segment s(Vector(0, 0), Vector(b, right[i]));
    double y = s.lineIntersect(leftLine).y;
    vector<int>::iterator it = lower_bound(left.begin(), left.end(), y);
    double sum = -1;
    int bl;
    if (it != left.end()) {
      sum = Vector(0, 0).dist(Vector(a, *it)) +
            Vector(a, *it).dist(Vector(b, right[i]));
      bl = it - left.begin();
    }
    if (it != left.begin()) {
      it--;
      if (sum < 0 || sum > Vector(0, 0).dist(Vector(a, *it)) +
                               Vector(a, *it).dist(Vector(b, right[i]))) {
        sum = Vector(0, 0).dist(Vector(a, *it)) +
              Vector(a, *it).dist(Vector(b, right[i]));
        bl = it - left.begin();
      }
    }
    sum += d[i];
    if (bestsum < 0 || bestsum > sum) {
      bestsum = sum;
      bestp = make_pair(bl, i);
    }
  }
  cout << bestp.first + 1 << ' ' << bestp.second + 1 << endl;
  return 0;
}
