#include <bits/stdc++.h>
using namespace std;
int n, nf, ne, ns, rf, re, rs, df, de, vis[800][2], f[800][3][2], cnt;
double lf, le, ls, ans;
struct node {
  int f, r;
  double x;
  node() {}
  node(double x, int f, int r) : x(x), f(f), r(r) {}
  friend bool operator<(node a, node b) { return a.x < b.x; }
} g[800];
void work() {
  for (int i = 1; i <= n / 2 + 1; i++)
    for (int j = 0; j < 2; j++) {
      if (vis[i][j] == 1)
        f[i][0][0]++, f[i][0][1]++;
      else if (vis[i][j] == 2)
        f[i][1][0]++, f[i][1][1]++;
      else if (vis[i][j] == 3)
        f[i][2][0]++, f[i][2][1]++;
    }
  int bin = 1, att = 0, flag = 0;
  double now = 0.0, last;
  for (int i = 0; i < cnt; i++)
    if (f[g[i].f][g[i].r][g[i].x > g[i].f]) {
      if (flag)
        now += (g[i].x - last) * bin * att;
      else
        flag = 1;
      last = g[i].x;
      if (g[i].r == 0) {
        if (g[i].x < g[i].f)
          bin++;
        else
          bin--;
      } else if (g[i].r == 1) {
        if (g[i].x < g[i].f)
          att += df;
        else
          att -= df;
      } else {
        if (g[i].x < g[i].f)
          att += de;
        else
          att -= de;
      }
      f[g[i].f][g[i].r][g[i].x > g[i].f]--;
    }
  ans = max(ans, now);
}
void dfs(int x, int y, int z, int k, int v) {
  if (x == 0 && y == 0 && z == 0) {
    work();
    return;
  }
  if (x > 1) vis[k][0] = vis[k][1] = 1, dfs(x - 2, y, z, k + 1, v);
  if (y > 1) vis[k][0] = vis[k][1] = 2, dfs(x, y - 2, z, k + 1, v);
  if (z > 1) vis[k][0] = vis[k][1] = 3, dfs(x, y, z - 2, k + 1, v);
  if (x > 0 && y > 0)
    vis[k][0] = 1, vis[k][1] = 2, dfs(x - 1, y - 1, z, k + 1, v);
  if (y > 0 && z > 0)
    vis[k][0] = 2, vis[k][1] = 3, dfs(x, y - 1, z - 1, k + 1, v);
  if (z > 0 && x > 0)
    vis[k][0] = 3, vis[k][1] = 1, dfs(x - 1, y, z - 1, k + 1, v);
  if (n & 1 && !v) {
    if (x > 0) vis[k][0] = 1, vis[k][1] = 0, dfs(x - 1, y, z, k + 1, 1);
    if (y > 0) vis[k][0] = 2, vis[k][1] = 0, dfs(x, y - 1, z, k + 1, 1);
    if (z > 0) vis[k][0] = 3, vis[k][1] = 0, dfs(x, y, z - 1, k + 1, 1);
  }
}
int main() {
  scanf("%d %d %d %d %d %d %d %d", &nf, &ne, &ns, &rf, &re, &rs, &df, &de);
  lf = (double)sqrt(rf * rf - 1);
  le = (double)sqrt(re * re - 1);
  ls = (double)sqrt(rs * rs - 1);
  n = nf + ne + ns;
  for (int i = 1; i <= n / 2 + 1; i++)
    for (int j = 0; j < 2; j++) {
      g[cnt++] = node(i - ls, i, 0), g[cnt++] = node(i + ls, i, 0);
      g[cnt++] = node(i - lf, i, 1), g[cnt++] = node(i + lf, i, 1);
      g[cnt++] = node(i - le, i, 2), g[cnt++] = node(i + le, i, 2);
    }
  sort(g, g + cnt);
  dfs(ns, nf, ne, 1, 0);
  printf("%.7lf\n", ans);
  return 0;
}
