#include <bits/stdc++.h>
using namespace std;
int N[3];
int R[3];
int P[3];
int X[32];
int Y[32];
double B[32];
double A[32][2];
double D[32][2];
int gN, gM;
double F(int pos, int n, int m, int flag) {
  double res = 0;
  int i, j, k;
  if (n == gN && m == gM) {
    for (i = (0); i < (n); ++i) {
      B[i] = A[i][1] * P[1] - A[i][0] * P[0];
      res += A[i][0] * P[0];
    }
    sort(B, B + n);
    for (i = (n - N[1]); i < (n); ++i) res += B[i];
    return res;
  }
  if (flag == 0) {
    if (n != gN) {
      X[n] = pos;
      for (j = (0); j < (2); ++j) A[n][j] = 0;
      for (j = (0); j < (m); ++j)
        for (k = (0); k < (2); ++k) A[n][k] += D[X[n] - Y[j]][k];
      res = max(res, F(pos + 1, n + 1, m, 1));
    }
    if (m != gM) {
      double a[32][2];
      for (i = (0); i < (n); ++i)
        for (j = (0); j < (2); ++j) a[i][j] = A[i][j];
      Y[m] = pos;
      for (j = (0); j < (n); ++j)
        for (k = (0); k < (2); ++k) A[j][k] += D[Y[m] - X[j]][k];
      res = max(res, F(pos + 1, n, m + 1, 1));
      for (i = (0); i < (n); ++i)
        for (j = (0); j < (2); ++j) A[i][j] = a[i][j];
    }
  }
  if (n + 1 < gN) {
    X[n] = X[n + 1] = pos;
    for (j = (0); j < (2); ++j) A[n][j] = A[n + 1][j] = 0;
    for (j = (0); j < (m); ++j)
      for (k = (0); k < (2); ++k) {
        A[n][k] += D[X[n] - Y[j]][k];
        A[n + 1][k] += D[X[n + 1] - Y[j]][k];
      }
    res = max(res, F(pos + 1, n + 2, m, 0));
  }
  if (m + 1 < gM) {
    double a[32][2];
    for (i = (0); i < (n); ++i)
      for (j = (0); j < (2); ++j) a[i][j] = A[i][j];
    Y[m] = Y[m + 1] = pos;
    for (j = (0); j < (n); ++j)
      for (k = (0); k < (2); ++k) A[j][k] += 2 * D[Y[m] - X[j]][k];
    res = max(res, F(pos + 1, n, m + 2, 0));
    for (i = (0); i < (n); ++i)
      for (j = (0); j < (2); ++j) A[i][j] = a[i][j];
  }
  if (n != gN && m != gM) {
    double a[32][2];
    for (i = (0); i < (n); ++i)
      for (j = (0); j < (2); ++j) a[i][j] = A[i][j];
    X[n] = pos;
    Y[m] = pos;
    for (j = (0); j < (2); ++j) A[n][j] = 0;
    for (j = (0); j < (n); ++j)
      for (k = (0); k < (2); ++k) A[j][k] += D[Y[m] - X[j]][k];
    for (j = (0); j < (m + 1); ++j)
      for (k = (0); k < (2); ++k) A[n][k] += D[X[n] - Y[j]][k];
    res = max(res, F(pos + 1, n + 1, m + 1, 0));
    for (i = (0); i < (n); ++i)
      for (j = (0); j < (2); ++j) A[i][j] = a[i][j];
  }
  return res;
}
int main() {
  int i, j;
  for (i = (0); i < (3); ++i) scanf("%d", &N[i]);
  for (i = (0); i < (3); ++i) scanf("%d", &R[i]);
  for (i = (0); i < (2); ++i) scanf("%d", &P[i]);
  if (R[0] > R[1]) {
    swap(N[0], N[1]);
    swap(R[0], R[1]);
    swap(P[0], P[1]);
  }
  for (i = (0); i < (32); ++i)
    for (j = (0); j < (2); ++j) {
      double r1 = sqrt(R[2] * R[2] - 1.0);
      double r2 = sqrt(R[j] * R[j] - 1.0);
      double Min = min(r1, i + r2);
      double Max = max(-r1, i - r2);
      D[i][j] = max(0.0, Min - Max);
    }
  gN = N[0] + N[1];
  gM = N[2];
  double res = 0;
  for (i = (0); i < (2); ++i) res += N[i] * P[i] * 2 * sqrt(R[i] * R[i] - 1.0);
  printf("%.7lf\n", F(0, 0, 0, 0) + res);
  return 0;
};
