#include <iostream>
#include <vector>
using namespace std;
class Solution {
void swap(int &x, int &y) const {
int tmp = x;
x = y;
y = tmp;
}
int max(const int &x, const int &y) const {
if(x > y)
return x;
return y;
}
void bubbleDown(vector<int> &v, int i, int size) const {
while(true){
int j = 2 * i + 1;
if(j >= size)
break;
if(j + 1 < size && v[j + 1] > v[j])
j++;
if(v[j] > v[i]){
swap(v[i], v[j]);
i = j;
}else break;
}
}
void sort(vector<int> &v) const {
int n = v.size();
for(int i = n - 1; i >= 0; i--)
bubbleDown(v, i, n);
for(int i = n - 1, tmp; i >= 0; i--){
swap(v[0], v[i]);
bubbleDown(v, 0, i);
}
}
int maxLength(const int &len, vector<int> &cuts) const {
sort(cuts);
int maxLen = max(len - cuts.back(), cuts.front());
for(int i = 1, n = cuts.size(); i < n; i++)
maxLen = max(maxLen, cuts[i] - cuts[i - 1]);
return maxLen;
}
public:
int maxArea(int h, int w, vector<int>& horizontalCuts, vector<int>& verticalCuts) {
return 1LL * maxLength(h, horizontalCuts) * maxLength(w, verticalCuts) % 1000000007;
}
};
int main() {
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjbGFzcyBTb2x1dGlvbiB7CiAgICB2b2lkIHN3YXAoaW50ICZ4LCBpbnQgJnkpIGNvbnN0IHsKICAgICAgICBpbnQgdG1wID0geDsKICAgICAgICB4ID0geTsKICAgICAgICB5ID0gdG1wOwogICAgfQogICAgaW50IG1heChjb25zdCBpbnQgJngsIGNvbnN0IGludCAmeSkgY29uc3QgewogICAgICAgIGlmKHggPiB5KQogICAgICAgICAgICByZXR1cm4geDsKICAgICAgICByZXR1cm4geTsKICAgIH0KICAgIHZvaWQgYnViYmxlRG93bih2ZWN0b3I8aW50PiAmdiwgaW50IGksIGludCBzaXplKSBjb25zdCB7CiAgICAgICAgd2hpbGUodHJ1ZSl7CiAgICAgICAgICAgIGludCBqID0gMiAqIGkgKyAxOwogICAgICAgICAgICBpZihqID49IHNpemUpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgaWYoaiArIDEgPCBzaXplICYmIHZbaiArIDFdID4gdltqXSkKICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgaWYodltqXSA+IHZbaV0pewogICAgICAgICAgICAgICAgc3dhcCh2W2ldLCB2W2pdKTsKICAgICAgICAgICAgICAgIGkgPSBqOwogICAgICAgICAgICB9ZWxzZSBicmVhazsKICAgICAgICB9CiAgICB9CiAgICB2b2lkIHNvcnQodmVjdG9yPGludD4gJnYpIGNvbnN0IHsKICAgICAgICBpbnQgbiA9IHYuc2l6ZSgpOwogICAgICAgIGZvcihpbnQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkKICAgICAgICAgICAgYnViYmxlRG93bih2LCBpLCBuKTsKICAgICAgICBmb3IoaW50IGkgPSBuIC0gMSwgdG1wOyBpID49IDA7IGktLSl7CiAgICAgICAgICAgIHN3YXAodlswXSwgdltpXSk7CiAgICAgICAgICAgIGJ1YmJsZURvd24odiwgMCwgaSk7CiAgICAgICAgfQogICAgfQogICAgaW50IG1heExlbmd0aChjb25zdCBpbnQgJmxlbiwgdmVjdG9yPGludD4gJmN1dHMpIGNvbnN0IHsKICAgICAgICBzb3J0KGN1dHMpOwogICAgICAgIGludCBtYXhMZW4gPSBtYXgobGVuIC0gY3V0cy5iYWNrKCksIGN1dHMuZnJvbnQoKSk7CiAgICAgICAgZm9yKGludCBpID0gMSwgbiA9IGN1dHMuc2l6ZSgpOyBpIDwgbjsgaSsrKQogICAgICAgICAgICBtYXhMZW4gPSBtYXgobWF4TGVuLCBjdXRzW2ldIC0gY3V0c1tpIC0gMV0pOwogICAgICAgIHJldHVybiBtYXhMZW47CiAgICB9CnB1YmxpYzoKICAgIGludCBtYXhBcmVhKGludCBoLCBpbnQgdywgdmVjdG9yPGludD4mIGhvcml6b250YWxDdXRzLCB2ZWN0b3I8aW50PiYgdmVydGljYWxDdXRzKSB7CiAgICAgICAgcmV0dXJuIDFMTCAqIG1heExlbmd0aChoLCBob3Jpem9udGFsQ3V0cykgKiBtYXhMZW5ndGgodywgdmVydGljYWxDdXRzKSAlIDEwMDAwMDAwMDc7CiAgICB9Cn07CmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=