#include <bits/stdc++.h>
int m = 10, ns, ne, nf;
int ps[20];
double rs, rf, re, df, de, ee[100], ef[100], dp[20][100][100], ans;
void calc() {
  int i, j, p, di, dj;
  memset(dp, 0, sizeof(dp));
  for (p = 0; p <= m; p++)
    for (i = 0; i <= ne; i++)
      for (j = 0; j <= nf; j++)
        for (di = 0; di + ps[p + 1] <= 2 && di + i <= ne; di++)
          for (dj = 0; dj + di + ps[p + 1] <= 2 && dj + j <= nf; dj++)
            dp[p + 1][i + di][j + dj] =
                std::max(dp[p + 1][i + di][j + dj],
                         dp[p][i][j] + ee[p + 1] * di + ef[p + 1] * dj);
  if (dp[m][ne][nf] > ans) ans = dp[m][ne][nf];
}
void dfs(int pos, int res) {
  if (res == 0) {
    calc();
    return;
  }
  if (pos == m + 1) return;
  if (res > (m + 1 - pos) * 2) return;
  for (int dk = std::min(res, 2); dk >= 0; dk--) {
    for (int p = 1; p <= m; p++) {
      ef[p] += dk * df *
               std::max(0.0, std::min(pos + rs, p + rf) -
                                 std::max(pos - rs, p - rf));
      ee[p] += dk * de *
               std::max(0.0, std::min(pos + rs, p + re) -
                                 std::max(pos - rs, p - re));
    }
    ps[pos] = dk;
    dfs(pos + 1, res - dk);
    ps[pos] = 0;
    for (int p = 1; p <= m; p++) {
      ef[p] -= dk * df *
               std::max(0.0, std::min(pos + rs, p + rf) -
                                 std::max(pos - rs, p - rf));
      ee[p] -= dk * de *
               std::max(0.0, std::min(pos + rs, p + re) -
                                 std::max(pos - rs, p - re));
    }
  }
}
int main() {
  scanf("%d%d%d", &nf, &ne, &ns);
  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 p = 1; p <= m; p++) {
    ef[p] = 2 * rf * df;
    ee[p] = 2 * re * de;
  }
  dfs(1, ns);
  printf("%lf", ans);
}
