#include <bits/stdc++.h>
using namespace std;
double rf, re, rs, df, de, maxi, dp[2][20];
int pf[22], pe[22], ps[22], f, e, s;
double memoize(int cho, int dis) {
  if (dp[cho][dis] != -1) return dp[cho][dis];
  double ans = 0;
  pair<double, double> sta = make_pair(-1 * rs, rs);
  pair<double, double> endi;
  if (cho == 0)
    endi = make_pair(dis - rf, dis + rf);
  else
    endi = make_pair(dis - re, dis + re);
  if (endi.first <= sta.first && endi.second >= sta.second)
    ans = (2 * rs);
  else if (endi.first >= sta.first && endi.second <= sta.second)
    ans = (endi.second - endi.first);
  else if (endi.first >= sta.first && endi.first <= sta.second &&
           endi.second >= sta.second)
    ans = (sta.second - endi.first);
  else if (sta.first >= endi.first && sta.first <= endi.second &&
           sta.second >= endi.second)
    ans = (endi.second - sta.first);
  return dp[cho][dis] = ans;
}
void calc() {
  double ans = 0, fire = 0, elec = 0;
  for (int i = int(1); i <= int(s); i++) {
    for (int j = int(1); j <= int(f); j++) {
      fire += memoize(0, abs(pf[j] - ps[i]));
    }
    for (int j = int(1); j <= int(e); j++) {
      elec += memoize(1, abs(pe[j] - ps[i]));
    }
  }
  fire += f * 2 * rf;
  elec += e * 2 * re;
  ans = fire * df + de * elec;
  maxi = max(maxi, ans);
}
void recurse(int nf, int ne, int ns, int poi) {
  if (nf == 0 && ne == 0 && ns == 0) {
    calc();
    return;
  }
  if (nf - 2 >= 0) {
    pf[nf] = pf[nf - 1] = poi;
    recurse(nf - 2, ne, ns, poi + 1);
  }
  if (ne - 2 >= 0) {
    pe[ne] = pe[ne - 1] = poi;
    recurse(nf, ne - 2, ns, poi + 1);
  }
  if (ns - 2 >= 0) {
    ps[ns] = ps[ns - 1] = poi;
    recurse(nf, ne, ns - 2, poi + 1);
  }
  if (nf - 1 >= 0 && ne - 1 >= 0) {
    pf[nf] = pe[ne] = poi;
    recurse(nf - 1, ne - 1, ns, poi + 1);
  }
  if (nf - 1 >= 0 && ns - 1 >= 0) {
    pf[nf] = ps[ns] = poi;
    recurse(nf - 1, ne, ns - 1, poi + 1);
  }
  if (ne - 1 >= 0 && ns - 1 >= 0) {
    pe[ne] = ps[ns] = poi;
    recurse(nf, ne - 1, ns - 1, poi + 1);
  }
  if (ne == 1 && ns == 0 && nf == 0) {
    pe[ne] = poi;
    recurse(nf, ne - 1, ns, poi + 1);
  }
  if (ns == 1 && ne == 0 && nf == 0) {
    ps[ns] = poi;
    recurse(nf, ne, ns - 1, poi + 1);
  }
  if (nf == 1 && ns == 0 && ne == 0) {
    pf[nf] = poi;
    recurse(nf - 1, ne, ns, poi + 1);
  }
}
int main() {
  maxi = 0;
  int nf, ne, ns;
  scanf("%d", &f);
  scanf("%d", &e);
  scanf("%d", &s);
  scanf("%lf%lf%lf", &rf, &re, &rs);
  rf = sqrt(rf * rf - 1);
  re = sqrt(re * re - 1);
  rs = sqrt(rs * rs - 1);
  scanf("%lf%lf", &df, &de);
  for (int i = int(0); i <= int(1); i++)
    for (int j = int(0); j <= int(19); j++) dp[i][j] = -1;
  recurse(f, e, s, 0);
  printf("%0.8lf\n", maxi);
  return 0;
}
