#include <bits/stdc++.h>
using namespace std;
const int N = 22;
const double eps = 1e-10;
int nf, ne, ns, rf, re, rs, df, de, n, a[N], tot = 0;
double ls[3];
int R[3];
struct line {
  double x1, x2;
  int d;
} w[N];
struct node {
  int id;
  double x;
} e[N * 2];
int zero(double x) { return fabs(x) < eps; }
bool cmp(const node &a, const node &b) { return a.x < b.x; }
double ans = 0;
void solve() {
  for (int i = 0; i < n; ++i) {
    w[i].x1 = i / 2 - ls[a[i]] - eps;
    w[i].x2 = i / 2 + ls[a[i]] + eps;
    w[i].d = a[i];
    e[i].x = w[i].x1, e[i].id = i;
    e[i + n].x = w[i].x2, e[i + n].id = i + n;
  }
  sort(e, e + n * 2, cmp);
  double res = 0;
  int d = 0, c = 0;
  for (int i = 0; i < 2 * n; ++i) {
    if (i) res += (e[i].x - e[i - 1].x) * (c + 1) * d;
    int ii = e[i].id;
    if (ii >= n) {
      ii -= n;
      if (w[ii].d == 2)
        c--;
      else
        d -= R[w[ii].d];
    } else {
      if (w[ii].d == 2)
        c++;
      else
        d += R[w[ii].d];
    }
  }
  ans = max(ans, res);
}
void dfs(int deep) {
  if (deep == n) {
    solve();
    return;
  }
  if (++tot > 2500000) return;
  if (nf) {
    a[deep] = 0;
    --nf;
    if (deep % 2 == 0 || a[deep] >= a[deep - 1]) dfs(deep + 1);
    ++nf;
  }
  if (ne) {
    a[deep] = 1;
    --ne;
    if (deep % 2 == 0 || a[deep] >= a[deep - 1]) dfs(deep + 1);
    ++ne;
  }
  if (ns) {
    a[deep] = 2;
    --ns;
    if (deep % 2 == 0 || a[deep] >= a[deep - 1]) dfs(deep + 1);
    ++ns;
  }
}
int main() {
  cin >> nf >> ne >> ns;
  cin >> rf >> re >> rs;
  cin >> df >> de;
  ls[0] = sqrt(rf * rf - 1);
  ls[1] = sqrt(re * re - 1);
  ls[2] = sqrt(rs * rs - 1);
  R[0] = df, R[1] = de, R[2] = rs;
  n = nf + ne + ns;
  dfs(0);
  printf("%.12lf\n", ans);
  return 0;
}
