#include <bits/stdc++.h>
using namespace std;
int nf, ne, nz, rf, re, rz, df, de;
double f, e, z, ans, d[30][30];
int a[100], N;
vector<pair<double, double> > ve;
void dp() {
  int i, j, k;
  ve.clear();
  ve.push_back(make_pair(-1e8, 1e8));
  for (i = 0; i <= N; i++) {
    for (j = 0; j < a[i]; j++) {
      ve.push_back(make_pair(i - z, i + z));
    }
  }
  memset(d, 0, sizeof(d));
  d[0][0] = 0;
  double fire, elec, l, r;
  for (i = 0; i <= N; i++) {
    for (j = 0; j < 2 - a[i]; j++) {
      fire = 0;
      elec = 0;
      for (k = 0; k < ve.size(); k++) {
        l = max(ve[k].first, i - f);
        r = min(ve[k].second, i + f);
        if (r > l) {
          fire += (r - l);
        }
        l = max(ve[k].first, i - e);
        r = min(ve[k].second, i + e);
        if (r > l) {
          elec += (r - l);
        }
      }
      fire *= df;
      elec *= de;
      for (int ii = nf; ii >= 0; ii--) {
        for (int jj = ne; jj >= 0; jj--) {
          if (ii > 0) {
            d[ii][jj] = max(d[ii][jj], d[ii - 1][jj] + fire);
          }
          if (jj > 0) {
            d[ii][jj] = max(d[ii][jj], d[ii][jj - 1] + elec);
          }
        }
      }
    }
  }
  ans = max(ans, d[nf][ne]);
}
int dfs(int pos, int x) {
  if (pos == N) {
    if (x == 0) {
      dp();
    }
    return 0;
  }
  if (x < 0) {
    return 0;
  }
  a[pos] = 0;
  dfs(pos + 1, x);
  a[pos] = 1;
  dfs(pos + 1, x - 1);
  a[pos] = 2;
  dfs(pos + 1, x - 2);
  return 0;
}
int main() {
  int i, j, k, n, m;
  scanf("%d%d%d", &nf, &ne, &nz);
  scanf("%d%d%d", &rf, &re, &rz);
  scanf("%d%d", &df, &de);
  memset(a, 0, sizeof(a));
  ans = 0;
  f = sqrt(rf * rf - 1);
  e = sqrt(re * re - 1);
  z = sqrt(rz * rz - 1);
  N = (nf + ne + nz + 1) / 2;
  dfs(0, nz);
  printf("%.10lf", ans);
  return 0;
}
