#include <bits/stdc++.h>
const int INF = 0x3f3f3f3f;
const long long int INFLL = 0x3f3f3f3f3f3f3f3fll;
long long int getint() {
  long long int ret = 0;
  bool f = 0;
  char c;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') f ^= 1;
  while (c >= '0' && c <= '9') {
    ret = ret * 10 + c - '0';
    c = getchar();
  }
  return f ? -ret : ret;
}
using namespace std;
const int MAXN = 100;
int nf = getint(), ne = getint(), ns = getint();
double rf = getint(), re = getint(), rs = getint();
int df = getint(), de = getint();
int n, up, down;
pair<double, int> p[MAXN + 10];
double val1[MAXN + 10], val2[MAXN + 10];
int rk[MAXN + 10];
bool cmp(int i, int j) { return val1[i] - val2[i] < val1[j] - val2[j]; }
int main() {
  n = nf + ne + ns;
  rf = sqrt(rf * rf - 1);
  re = sqrt(re * re - 1);
  rs = sqrt(rs * rs - 1);
  int maxt = 1 << n;
  up = n / 2;
  down = n - up;
  double output = 0;
  for (int bs = (1 << ns) - 1; bs < maxt;) {
    int bt = bs, cnt = 0;
    p[++cnt] = make_pair(-1.0 * INF, 1);
    for (int i = 1; i <= up; ++i, bt >>= 1)
      if (bt & 1) {
        p[++cnt] = make_pair(i - rs, 1);
        p[++cnt] = make_pair(i + rs, -1);
      }
    for (int i = 1; i <= down; ++i, bt >>= 1)
      if (bt & 1) {
        p[++cnt] = make_pair(i - rs, 1);
        p[++cnt] = make_pair(i + rs, -1);
      }
    sort(p + 1, p + cnt + 1);
    for (int i = 1; i <= cnt; ++i) p[i].second += p[i - 1].second;
    bt = ~bs;
    int m = 0;
    for (int i = 1; i <= up; ++i, bt >>= 1)
      if (bt & 1) {
        rk[++m] = i;
        double l = i - rf, r = i + rf;
        int tl = lower_bound(p + 1, p + cnt + 1, make_pair(l, 0)) - p;
        int tr = lower_bound(p + 1, p + cnt + 1, make_pair(r, 0)) - p - 1;
        if (tl > tr)
          val1[i] = (r - l) * p[tr].second * df;
        else {
          val1[i] = (p[tl].first - l) * p[tl - 1].second;
          val1[i] += (r - p[tr].first) * p[tr].second;
          for (int j = tl; j < tr; ++j)
            val1[i] += (p[j + 1].first - p[j].first) * p[j].second;
          val1[i] *= df;
        }
        l = i - re;
        r = i + re;
        tl = lower_bound(p + 1, p + cnt + 1, make_pair(l, 0)) - p;
        tr = lower_bound(p + 1, p + cnt + 1, make_pair(r, 0)) - p - 1;
        if (tl > tr)
          val2[i] = (r - l) * p[tr].second * de;
        else {
          val2[i] = (p[tl].first - l) * p[tl - 1].second;
          val2[i] += (r - p[tr].first) * p[tr].second;
          for (int j = tl; j < tr; ++j)
            val2[i] += (p[j + 1].first - p[j].first) * p[j].second;
          val2[i] *= de;
        }
      }
    for (int i = 1; i <= down; ++i, bt >>= 1)
      if (bt & 1) {
        rk[++m] = i + up;
        double l = i - rf, r = i + rf;
        int tl = lower_bound(p + 1, p + cnt + 1, make_pair(l, 0)) - p;
        int tr = lower_bound(p + 1, p + cnt + 1, make_pair(r, 0)) - p - 1;
        if (tl > tr)
          val1[i + up] = (r - l) * p[tr].second * df;
        else {
          val1[i + up] = (p[tl].first - l) * p[tl - 1].second;
          val1[i + up] += (r - p[tr].first) * p[tr].second;
          for (int j = tl; j < tr; ++j)
            val1[i + up] += (p[j + 1].first - p[j].first) * p[j].second;
          val1[i + up] *= df;
        }
        l = i - re;
        r = i + re;
        tl = lower_bound(p + 1, p + cnt + 1, make_pair(l, 0)) - p;
        tr = lower_bound(p + 1, p + cnt + 1, make_pair(r, 0)) - p - 1;
        if (tl > tr)
          val2[i + up] = (r - l) * p[tr].second * de;
        else {
          val2[i + up] = (p[tl].first - l) * p[tl - 1].second;
          val2[i + up] += (r - p[tr].first) * p[tr].second;
          for (int j = tl; j < tr; ++j)
            val2[i + up] += (p[j + 1].first - p[j].first) * p[j].second;
          val2[i + up] *= de;
        }
      }
    sort(rk + 1, rk + m + 1, cmp);
    double ans = 0;
    for (int i = 1; i <= ne; ++i) ans += val2[rk[i]];
    for (int i = ne + 1; i <= m; ++i) ans += val1[rk[i]];
    output = max(output, ans);
    int xs = bs & -bs;
    if (!xs) break;
    int ys = bs + xs;
    bs = ((bs & ~ys) / xs >> 1) | ys;
  }
  printf("%.10f\n", output);
}
