68520be7e69d16258a353c1b4a441bc6648fb58914161c6607ea2b7f71fbd3b4
// 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;
}