#include <bits/stdc++.h>
using namespace std;
const int mn = 3e5 + 10;
int sum, cnt;
int num[5], s[5], c[mn];
struct Node
{
int a, b, ts;
} node[10];
int tnum[5];
bool check(int mid)
{
for (int i = 1; i <= 3; i++)
tnum[i] = num[i];
for (int i = 1; i <= sum / 2; i++) // 从最慢速度开始枚举每艘船
{
bool flag = 0;
for (int j = 1; j <= 6; j++) // 为船配队伍
{
if (tnum[node[j].a] == 0 || tnum[node[j].b] == 0)
continue;
if (node[j].a == node[j].b && tnum[node[j].a] < 2)
continue;
int v = c[i] * (s[node[j].a] + s[node[j].b]); // 总速
if (v >= mid) // 总速 >= 设定的最小速度, 可以满足条件, 给该船配上队伍
{
flag = 1;
tnum[node[j].a]--;
tnum[node[j].b]--;
break;
}
}
if (flag == 0) // 该船无法配上队伍
return 0;
}
return 1;
}
int main()
{
for (int i = 1; i <= 3; i++)
{
scanf("%d", &num[i]);
sum += num[i];
}
for (int i = 1; i <= 3; i++)
scanf("%d", &s[i]);
for (int i = 1; i <= sum / 2; i++)
scanf("%d", &c[i]);
sort(c + 1, c + sum / 2 + 1);
for (int i = 1; i <= 3; i++)
for (int j = i; j <= 3; j++)
{
node[++cnt].a = i;
node[cnt].b = j;
node[cnt].ts = s[i] + s[j];
}
int ans = -1, l = 0, r = 1e9;
while (l <= r)
{
int mid = (l + r) / 2; // mid 最小速度
if (check(mid)) // 是否可达到该最小速度
{
ans = mid;
l = mid + 1;
}
else
r = mid - 1;
}
printf("%d\n", ans);
return 0;
}