#include <bits/stdc++.h>
using namespace std;
const int N = 13;
const int S = 20;
double best, r[3], dp[N + 1][S + 1][S + 1], dmg[2];
int d[2], slow[N], cnt[3], res[2];
double cross(double l1, double r1, double l2, double r2) {
  return max(0.0, min(r1, r2) - max(l1, l2));
}
void relax_max(double& res, double tmp) {
  if (res < tmp) res = tmp;
}
void compute() {
  for (int i = 0; i <= N; ++i)
    for (int j = 0; j <= cnt[0]; ++j)
      for (int k = 0; k <= cnt[1]; ++k) dp[i][j][k] = 0;
  int sum = 0;
  for (int i = 0; i < N; ++i) {
    for (int t = 0; t < 2; ++t) {
      dmg[t] = 2 * r[t];
      for (int j = 0; j < N; ++j)
        if (slow[j])
          dmg[t] += cross(i - r[t], i + r[t], j - r[2], j + r[2]) * slow[j];
      dmg[t] *= d[t];
    }
    for (int j = 0; j <= cnt[0]; ++j)
      for (int k = 0; k <= cnt[1]; ++k)
        if (j + k + sum <= 2 * i)
          for (int delta = 0; delta <= 2 - slow[i]; ++delta)
            for (int mask = 0; mask < (1 << delta); ++mask) {
              res[0] = res[1] = 0;
              for (int cur = 0; cur < delta; ++cur) res[(mask >> cur) & 1]++;
              if ((j + res[0] <= cnt[0]) && (k + res[1] <= cnt[1]))
                relax_max(dp[i + 1][j + res[0]][k + res[1]],
                          dp[i][j][k] + res[0] * dmg[0] + res[1] * dmg[1]);
            }
    sum += slow[i];
  }
  best = max(best, dp[N][cnt[0]][cnt[1]]);
}
void go(int cnt, int n) {
  if (n == N) {
    bool good = true;
    for (int i = 0; i < N; ++i) {
      if (slow[i] <= slow[N - 1 - i]) break;
      if (slow[i] > slow[N - 1 - i]) {
        good = false;
        break;
      }
    }
    if (good && (cnt == 0)) compute();
    return;
  }
  for (slow[n] = 0; slow[n] <= min(2, cnt); ++slow[n]) go(cnt - slow[n], n + 1);
}
int main() {
  for (int i = 0; i < 3; ++i) scanf("%d", &cnt[i]);
  for (int i = 0; i < 3; ++i) {
    scanf("%lf", &r[i]);
    r[i] = sqrt(r[i] * r[i] - 1);
  }
  for (int i = 0; i < 2; ++i) scanf("%d", &d[i]);
  best = 0;
  go(cnt[2], 0);
  printf("%.10lf\n", best);
  return 0;
}
