#include <bits/stdc++.h>
using namespace std;
double f[22], lf[22], le[22];
double bf, be, bs, ans;
int nf, ne, ns, n, df, de;
int ps[22], pd[22];
void check() {
  memset(f, 0, sizeof f);
  for (int i = 0; i < nf + ne; i++) {
    double af = 2 * bf, ae = 2 * be;
    for (int j = 0; j < ns; j++) af += lf[abs(ps[j] / 2 - pd[i] / 2)];
    for (int j = 0; j < ns; j++) ae += le[abs(ps[j] / 2 - pd[i] / 2)];
    af *= df, ae *= de;
    if (i < nf) f[i + 1] = f[i] + af;
    for (int j = min(i, nf); j; j--) f[j] = max(f[j] + ae, f[j - 1] + af);
    f[0] += ae;
  }
  ans = max(ans, f[nf]);
}
void dfs(int i, int s) {
  if (i == n)
    check();
  else {
    if (s != ns) {
      ps[s] = i;
      dfs(i + 1, s + 1);
    }
    if (ns - s != n - i) {
      pd[i - s] = i;
      dfs(i + 1, s);
    }
  }
}
int main() {
  int rf, re, rs, i;
  scanf("%d%d%d%d%d%d%d%d", &nf, &ne, &ns, &rf, &re, &rs, &df, &de);
  n = nf + ne + ns, ans = 0.0;
  bf = sqrt(rf * rf - 1), be = sqrt(re * re - 1), bs = sqrt(rs * rs - 1);
  for (i = 0; i <= 10; i++) {
    lf[i] = max(0.0, min(bs, bf + i) - max(-bs, -bf + i));
    le[i] = max(0.0, min(bs, be + i) - max(-bs, -be + i));
  }
  dfs(0, 0);
  printf("%.8lf\n", ans);
  return 0;
}
