#include <bits/stdc++.h>
using namespace std;
const int N = -1;
const long long INF = 1e9 + 19;
bool equalll(double a, double b) { return abs(a - b) < 1e-9; }
bool lesss(double a, double b) { return a < b && !equalll(a, b); }
bool lessE(double a, double b) { return a < b || equalll(a, b); }
struct pnt {
  double x, y;
  pnt() {}
  pnt(double x, double y) : x(x), y(y) {}
  pnt operator+(pnt A) { return pnt(x + A.x, y + A.y); }
  pnt operator-(pnt A) { return pnt(x - A.x, y - A.y); }
  double operator*(pnt A) { return x * A.y - y * A.x; }
  double operator%(pnt A) { return x * A.x + y * A.y; }
  pnt operator*(double k) { return pnt(x * k, y * k); }
  pnt operator/(double k) { return pnt(x / k, y / k); }
  double len() { return sqrt(x * x + y * y); }
  pnt rotate() { return pnt(-y, x); }
  pnt norm() { return (*this) / len(); }
  void read() { scanf("%lf%lf", &x, &y); }
};
struct Line {
  pnt O, v;
  Line() {}
  Line(pnt A, pnt B) : O(A), v((B - A).norm()) {}
  pnt operator*(Line l) {
    pnt u = l.v.rotate();
    assert(!equalll(0, v % u));
    double t = (l.O - O) % u / (v % u);
    return O + v * t;
  }
};
double y11, y22, yw, r;
pnt O;
void read() {
  scanf("%lf%lf%lf", &y11, &y22, &yw);
  O.read();
  scanf("%lf", &r);
}
Line getTan(pnt A, double r, pnt B) {
  pnt v = (B - A).norm();
  double l = (A - B).len();
  double d = r * r / l;
  pnt C = A + v * d;
  v = v.rotate();
  pnt D = C + v * (r * sqrt(1 - r * r / l / l));
  assert(equalll((D - A).len(), r));
  return Line(D, B);
}
void solve() {
  y11 = (yw - r) * 2 - y11;
  y22 = (yw - r) * 2 - y22;
  pnt A(0, y11 - r);
  Line l1(A, O);
  Line hor(pnt(0, yw - r), pnt(1, yw - r));
  double x1 = (l1 * hor).x;
  pnt B(0, y22);
  Line l2 = getTan(B, r, O);
  double x2 = (l2 * hor).x;
  assert(!equalll(x1, x2));
  if (lesss(x2, x1)) {
    printf("%.17f\n", (x1 + x2) / 2);
  } else
    puts("-1");
}
void stress() {}
int main() {
  if (1) {
    int k = 1;
    for (int tt = 0; tt < k; tt++) {
      read();
      solve();
    }
  } else {
    stress();
  }
  return 0;
}
