#include <bits/stdc++.h>   using namespace std;   const long double EPS = 1e-9;   long double Dis(long long a, long long Y, long long b, long long YY) {     return sqrt((long double)(b - a) * (b - a) + (Y - YY) * (Y - YY));   }   struct PT {     long long ID;     long double len, Y;     PT(long long _ID, long double _Y) {       ID = _ID;       Y = _Y;     }     bool operator<(const PT &a) const { return (Y < a.Y); }   };   vector<PT> A, B;   void BinSearch(vector<PT> &C, long double val, long long &low, long long &up) {     long long i, med;     up = C.size() - 1;     low = 0;     if (val >= C[up].Y) {       low = max(up - 1, low);       return;     }     if (val <= C[low].Y) {       up = min(low + 1, up);       return;     }     while ((up - low) > 1) {       med = (up + low) / 2;       if (C[med].Y < val)         low = med;       else         up = med;     }   }   int main() {     long long i, n, m, a, b, temp;     cin >> n >> m >> a >> b;     for (i = 0; i < n; i++) {       cin >> temp;       A.push_back(PT(i + 1, temp));       A[i].len = Dis(0, 0, a, temp);     }     for (i = 0; i < m; i++) {       cin >> temp;       B.push_back(PT(i + 1, temp));     }     for (i = 0; i < m; i++) {       cin >> temp;       B[i].len = temp;     }     sort(A.begin(), A.end());     sort(B.begin(), B.end());     long long ind1, ind2;     long double ans, tmp1, tmp2, mini, tt;     long long l, u;     ans = 1e18;     for (i = 0; i < m; i++) {       tt = ((long double)a * B[i].Y) / ((long double)(b));       BinSearch(A, tt, l, u);       tmp1 = Dis(a, A[u].Y, b, B[i].Y) + A[u].len;       tmp2 = Dis(a, A[l].Y, b, B[i].Y) + A[l].len;       mini = min(tmp1, tmp2);       if (ans > (B[i].len + mini)) {         if ((tmp1 < tmp2))           ind1 = A[u].ID, ans = B[i].len + tmp1;         else           ind1 = A[l].ID, ans = B[i].len + tmp2;         ind2 = B[i].ID;       }     }     cout << ind1 <<     << ind2 << endl;     return 0;   }   