#include <bits/stdc++.h>
using namespace std;
int N, nf, ne, ns, Ns;
double rf, re, rs, df, de, ans;
vector<double> A;
int r[30], c[3], p[30];
bool v[30], g[30];
inline void sol() {
  int i, j, x;
  double s = 2 * (nf * rf * df + ne * re * de), t0, t1;
  A.clear();
  for (i = 0; i < N; ++i)
    if (!v[i]) {
      t0 = t1 = 0;
      for (j = 0; j < Ns; ++j) {
        t0 += (max(min(i / 2 + rf, p[j] / 2 + rs) -
                       max(i / 2 - rf, p[j] / 2 - rs),
                   0.)) *
              df;
        t1 += (max(min(i / 2 + re, p[j] / 2 + rs) -
                       max(i / 2 - re, p[j] / 2 - rs),
                   0.)) *
              de;
      }
      s += t1, A.push_back(t1 - t0);
    }
  sort(A.begin(), A.end());
  for (i = 0; i < nf; ++i) s -= A[i];
  ans = max(ans, s);
}
inline void dfs(int n) {
  if (n == N) {
    if (!ns) sol();
    return;
  }
  dfs(n + 1);
  if (ns) {
    --ns, v[n] = 1, p[ns] = n;
    dfs(n + 1);
    ++ns, v[n] = 0;
  }
}
int main() {
  if (0) {
    freopen("t.in", "r", stdin);
    freopen("t.out", "w", stdout);
  }
  scanf("%d%d%d", &nf, &ne, &ns), Ns = ns;
  scanf("%lf%lf%lf", &rf, &re, &rs);
  scanf("%lf%lf", &df, &de);
  N = nf + ne + ns;
  rf = sqrt(rf * rf - 1), re = sqrt(re * re - 1), rs = sqrt(rs * rs - 1);
  for (int i = 0; i < 26; ++i) r[i] = (i >= 13) ? (i - 13) : i;
  dfs(0);
  printf("%.10lf", ans);
  return 0;
}
