#include <iostream>
using namespace std;
// 寫一個輔助函數:根據目前的總水量,算出對應的水位高度
int getHeight(int vol, int w1, int h1, int w2, int h2) {
int v1 = w1 * w1 * h1;
int v2 = w2 * w2 * h2;
if (vol <= 0) return 0;
// 如果水量超過總容量,高度就是兩個容器的高度和
if (vol >= v1 + v2) return h1 + h2;
// 如果水量還在下層容器
if (vol <= v1) {
return vol / (w1 * w1);
}
// 如果水量已經超過下層,進入上層容器
else {
return h1 + (vol - v1) / (w2 * w2);
}
}
int main() {
int n, w1, w2, h1, h2;
if (!(cin >> n >> w1 >> w2 >> h1 >> h2)) return 0;
int v1 = w1 * w1 * h1;
int v2 = w2 * w2 * h2;
int max_capacity = v1 + v2;
int current_volume = 0;
int max_differ = 0;
for (int i = 0; i < n; i++) {
int pour;
cin >> pour;
// 如果水已經滿了,後面的倒水都不會增加高度
if (current_volume >= max_capacity) {
continue;
}
// 1. 倒水前的高度
int old_h = getHeight(current_volume, w1, h1, w2, h2);
// 2. 更新總水量 (注意不能超過最大容量)
current_volume += pour;
if (current_volume > max_capacity) {
current_volume = max_capacity;
}
// 3. 倒水後的高度
int new_h = getHeight(current_volume, w1, h1, w2, h2);
// 4. 計算高度差並更新最大值
int differ = new_h - old_h;
if (differ > max_differ) {
max_differ = differ;
}
}
cout << max_differ << "\n";
return 0;
}