#include <bits/stdc++.h>
using namespace std;
int nf, ne, ns;
int rf, re, rs;
int df, de;
long double ans;
vector<long double> vx;
long double tms[65], sum[65];
long double dp[15][25][25];
long double sqt[1005];
int pos[15][3][2];
void upd(long double &x, long double y) { y > x && (x = y); }
long double cal(int i, int radii, int dmg) {
  int l = pos[i][radii][0];
  int r = pos[i][radii][1];
  return (sum[r] - sum[l] + vx[r] - vx[l]) * dmg;
}
void solve(int mask) {
  for (int i = 0; i <= vx.size(); ++i) tms[i] = 0;
  for (int i = 0; i < 20; ++i)
    if (mask >> i & 1) {
      int l = pos[(i >> 1)][2][0];
      int r = pos[(i >> 1)][2][1];
      for (int j = l; j < r; ++j) tms[j] += vx[j + 1] - vx[j];
    }
  sum[0] = 0;
  for (int i = 0; i < vx.size(); ++i) sum[i + 1] = sum[i] + tms[i];
  for (int i = 0; i <= 10; ++i)
    for (int j = 0; j <= nf; ++j)
      for (int k = 0; k <= ne; ++k) dp[i][j][k] = -1e18;
  dp[0][nf][ne] = 0;
  for (int i = 0; i < 10; ++i)
    for (int j = 0; j <= nf; ++j)
      for (int k = 0; k <= ne; ++k) {
        int cnt = (mask >> (i << 1) & 1) + (mask >> (i << 1 | 1) & 1);
        if (cnt <= 0) {
          if (j >= 2) upd(dp[i + 1][j - 2][k], dp[i][j][k] + cal(i, 0, df) * 2);
          if (j >= 1 && k >= 1)
            upd(dp[i + 1][j - 1][k - 1],
                dp[i][j][k] + cal(i, 0, df) + cal(i, 1, de));
          if (k >= 2) upd(dp[i + 1][j][k - 2], dp[i][j][k] + cal(i, 1, de) * 2);
        }
        if (cnt <= 1) {
          if (j >= 1) upd(dp[i + 1][j - 1][k], dp[i][j][k] + cal(i, 0, df));
          if (k >= 1) upd(dp[i + 1][j][k - 1], dp[i][j][k] + cal(i, 1, de));
        }
        upd(dp[i + 1][j][k], dp[i][j][k]);
      }
  for (int i = 0; i <= nf; ++i)
    for (int j = 0; j <= ne; ++j) upd(ans, dp[10][i][j]);
}
int main() {
  for (int i = 1; i <= 1000; ++i) sqt[i] = sqrt(i * i - 1);
  cin >> nf >> ne >> ns;
  cin >> rf >> re >> rs;
  cin >> df >> de;
  for (int i = 0; i < 10; ++i) {
    vx.push_back(i - sqt[rf]);
    vx.push_back(i + sqt[rf]);
    vx.push_back(i - sqt[re]);
    vx.push_back(i + sqt[re]);
    vx.push_back(i - sqt[rs]);
    vx.push_back(i + sqt[rs]);
  }
  sort(vx.begin(), vx.end());
  vx.erase(unique(vx.begin(), vx.end()), vx.end());
  for (int i = 0; i < 10; ++i) {
    pos[i][0][0] = lower_bound(vx.begin(), vx.end(), i - sqt[rf]) - vx.begin();
    pos[i][0][1] = lower_bound(vx.begin(), vx.end(), i + sqt[rf]) - vx.begin();
    pos[i][1][0] = lower_bound(vx.begin(), vx.end(), i - sqt[re]) - vx.begin();
    pos[i][1][1] = lower_bound(vx.begin(), vx.end(), i + sqt[re]) - vx.begin();
    pos[i][2][0] = lower_bound(vx.begin(), vx.end(), i - sqt[rs]) - vx.begin();
    pos[i][2][1] = lower_bound(vx.begin(), vx.end(), i + sqt[rs]) - vx.begin();
  }
  for (int mask = 0; mask < (1 << 20); ++mask) {
    if (__builtin_popcount(mask) != ns) continue;
    int cnt = 0;
    for (int i = 0; i < 10; ++i) cnt += (mask >> (i << 1) & 1);
    if (cnt < ns - cnt) continue;
    solve(mask);
  }
  cout << fixed << ans << endl;
  return 0;
}
