#include <bits/stdc++.h>
using namespace std;
int nf, ne, ns, rf, re, rs, df, de, n, c[15];
double Rf, Re, Rs, ans, g[15][21][21], E[15], F[15];
double cross(double l, double r, double x, double y) {
  return max(0., min(r, y) - max(l, x));
}
void work() {
  for (int i = 0; i < n; i++) {
    E[i] = 2 * Re * de, F[i] = 2 * Rf * df;
    for (int j = 0; j < n; j++)
      if (c[j])
        E[i] += cross(i - Re, i + Re, j - Rs, j + Rs) * de * c[j],
            F[i] += cross(i - Rf, i + Rf, j - Rs, j + Rs) * df * c[j];
  }
  for (int i = 0; i < n; i++)
    for (int j = 0; j <= ne; j++)
      for (int k = 0; k <= nf; k++) g[i][j][k] = -2;
  g[0][0][0] = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j <= ne; j++)
      for (int k = 0; k <= nf; k++)
        if (g[i][j][k] > -1)
          for (int x = 0; x + c[i] < 3 && x + j <= ne; x++)
            for (int y = 0; x + y + c[i] < 3 && y + k <= nf; y++)
              if (g[i][j][k] + E[i] * x + F[i] * y > g[i + 1][j + x][k + y])
                g[i + 1][j + x][k + y] = g[i][j][k] + E[i] * x + F[i] * y;
  if (g[n][ne][nf] > ans) ans = g[n][ne][nf];
}
void dfs(int x, int cnt) {
  if (!cnt) {
    work();
    return;
  }
  if (x >= n) return;
  for (int i = min(cnt, 2); i >= 0; i--) c[x] = i, dfs(x + 1, cnt - i);
}
int main() {
  scanf("%d%d%d%d%d%d%d%d", &nf, &ne, &ns, &rf, &re, &rs, &df, &de),
      n = (nf + ne + ns) / 2 + 2;
  Rf = sqrt(rf * rf - 1.), Re = sqrt(re * re - 1.), Rs = sqrt(rs * rs - 1.);
  dfs(0, ns);
  printf("%.9lf\n", ans);
  return 0;
}
