#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9;
const int INF = 0x7fffffff;
const double PI = acos(-1.0);
const int MAX = 100005;
const int MOD = 1000000007;
inline bool isEq(double a, double b) { return abs(a - b) < EPS; }
inline bool isEq(double a, double b, double eps) { return abs(a - b) < eps; }
inline double toRad(double deg) { return deg * PI / 180; }
inline double toDeg(double rad) { return rad * 180 / PI; }
class Timer {
  clock_t start;
  string name;

 public:
  Timer() {
    name = "";
    start = clock();
  }
  Timer(string s) {
    name = s;
    start = clock();
  }
  ~Timer() {
    fprintf(stderr, "%s: %.3gs\n", name.c_str(),
            1.0 * (clock() - start) / CLOCKS_PER_SEC);
  }
};
double cross(complex<double> &a, complex<double> &b) {
  return imag((conj(a) * b));
}
double perpendicularDist(double x1, double y1, double x2, double y2, double x3,
                         double y3) {
  complex<double> A = complex<double>(x2 - x1, y2 - y1);
  complex<double> B = complex<double>(x3 - x1, y3 - y1);
  return cross(A, B) / abs(A);
}
double getYaxiyIntersection(complex<double> start, complex<double> a) {
  double lo = 0, hi = 1000000000, dist = 0;
  int cnt = 300;
  a = a / abs(a);
  complex<double> en;
  while (cnt--) {
    dist = (lo + hi) / 2;
    en = start + a * dist;
    if (start.real() * en.real() > 0)
      lo = dist;
    else
      hi = dist;
  }
  return en.imag();
}
int main(int argc, char *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  double y1, y2, yw, xb, yb, r;
  cin >> y1 >> y2 >> yw >> xb >> yb >> r;
  double lowxw = 0, highxw = xb, xw, y, rxb;
  int cnt = 300;
  double yweff = yw - r;
  bool found = false;
  complex<double> A;
  while (cnt--) {
    xw = (lowxw + highxw) / 2;
    rxb = xw - (xb - xw);
    A = complex<double>(xw - rxb, yweff - yb);
    if (rxb > 0) A = -A;
    y = getYaxiyIntersection(complex<double>(rxb, yb), A);
    if (y - r >= y1 && y2 >= y + r &&
        perpendicularDist(0, y, xw, yweff, 0, y2) >= r) {
      found = true;
      break;
    } else {
      if (y - r < y1)
        highxw = xw;
      else
        lowxw = xw;
    }
  }
  if (found)
    cout << fixed << setprecision(10) << xw << endl;
  else
    cout << "-1" << endl;
  return 0;
}
