#include <bits/stdc++.h>
using namespace std;
int nf, ne, ns, rf, re, rs, df, de, tower[20];
pair<double, double> tf[10], te[10], ts[10];
bool check[20];
double cross(const pair<double, double> &a, const pair<double, double> &b) {
  if (max(a.first, b.first) > min(a.second, b.second)) return 0;
  return min(a.second, b.second) - max(a.first, b.first);
}
double solve() {
  double sum = 0;
  sum += nf * df * sqrt(rf * rf - 1) * 2;
  sum += ne * de * sqrt(re * re - 1) * 2;
  vector<double> L;
  for (int i = 0; i < nf + ne + ns; i++)
    if (!check[i]) {
      double T1 = 0, T2 = 0;
      for (int j = 0; j < ns; j++) {
        T1 += cross(tf[i / 2], ts[tower[j] / 2]) * df;
        T2 += cross(te[i / 2], ts[tower[j] / 2]) * de;
      }
      sum += T1;
      L.push_back(T2 - T1);
    }
  sort(L.begin(), L.end());
  for (int i = nf; i < nf + ne; i++) sum += L[i];
  return sum;
}
void dfs(int cur, int tot, double &ans) {
  if (tot == ns) ans = max(ans, solve());
  if (cur == nf + ne + ns) return;
  dfs(cur + 1, tot, ans);
  check[cur] = true;
  tower[tot] = cur;
  dfs(cur + 1, tot + 1, ans);
  check[cur] = false;
}
int main() {
  scanf("%d%d%d", &nf, &ne, &ns);
  scanf("%d%d%d", &rf, &re, &rs);
  scanf("%d%d", &df, &de);
  for (int i = 0; i <= (nf + ne + ns - 1) / 2; i++) {
    tf[i] = make_pair(i - sqrt(rf * rf - 1), i + sqrt(rf * rf - 1));
    te[i] = make_pair(i - sqrt(re * re - 1), i + sqrt(re * re - 1));
    ts[i] = make_pair(i - sqrt(rs * rs - 1), i + sqrt(rs * rs - 1));
  }
  double ans = 0;
  memset(check, false, sizeof(check));
  dfs(0, 0, ans);
  printf("%.8lf\n", ans);
  return 0;
}
