OIG V - tor

// https://szkopul.edu.pl/problemset/problem/G50OwjoYk8gUak-2HGHGll4o/site/?key=statement

#include <bits/stdc++.h>

using namespace std;

#define int long long

constexpr int sizik = 1000 * 1001, INF = (int)1e9 * 1e9 + 1;

#define ar std::array
#define pr std::pair
#define vec std::vector

typedef long long ll;
typedef vec<vec<int>> _kra;

int a, b, n, k;
std::vector<int> ca, cb;

bool check(int s) {
    int wyn = 0;

    int start = 0;
    for (int i = 1; i <= n + 1; i++) {
        if (cb[0] * ca[i - 1] <= s) {
            start = i;
        } else {
            break;
        }
    }

    for (int i = 1; i <= n + 1; i++) {
        while (start > 0 && cb[i - 1] * ca[start - 1] > s) {
            start--;
        }

        wyn += n + 1 - start;
    }

    return wyn >= k;
}

void solve() {
    std::cin >> a >> b >> n >> k;

    int prev;

    prev = 0;
    for (int i = 0; i < n; i++) {
        int x;
        std::cin >> x;

        ca.push_back(x - prev);

        prev = x;
    }
    ca.push_back(a - prev);

    prev = 0;
    for (int i = 0; i < n; i++) {
        int x;
        std::cin >> x;

        cb.push_back(x - prev);

        prev = x;
    }
    cb.push_back(b - prev);

    std::sort(ca.begin(), ca.end());
    std::sort(cb.begin(), cb.end());

    int l = 1, r = ca[n] * cb[n];

    while (l < r) {
        int s = (l + r) / 2;

        if (check(s)) {
            l = s + 1;
        } else {
            r = s;
        }
    }

    std::cout << l << '\n';
}

int32_t main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}