#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point(double x = 0, double y = 0) : x(x), y(y) {}
  point operator-(point a) { return point(x - a.x, y - a.y); }
  point operator+(point a) { return point(x + a.x, y + a.y); }
  point operator*(double a) { return point(x * a, y * a); }
  point operator/(double a) { return point(x / a, y / a); }
  point operator&(point a) {
    return point(x * a.x - y * a.y, x * a.y + y * a.x);
  }
  point rotate(double al) { return *this & point(cos(al), sin(al)); }
  double operator^(point a) { return x * a.y - y * a.x; }
  double operator*(point a) { return x * a.x + y * a.y; }
  point norm() {
    double s = nor();
    if (s < 1e-10) return *this;
    return point(x / s, y / s);
  }
  point conj() { return point(-y, x); }
  double nor() { return sqrt(*this * *this); }
  double al() { return atan2(y, x); }
  bool operator<(const point &a) const {
    if (fabs(x - a.x) > 1e-10) return x < a.x;
    return y < a.y - 1e-10;
  }
  bool operator>(const point &a) const {
    if (fabs(x - a.x) > 1e-10) return x > a.x;
    return y > a.y + 1e-10;
  }
  bool operator==(const point &a) const {
    if (fabs(x - a.x) > 1e-10) return 0;
    return fabs(y - a.y) < 1e-10;
  }
};
double pdist(point c, point a, point b) {
  point aa = c - a, bb = c - b, ab = a - b;
  return fabs(aa ^ bb) / ab.nor();
}
int main() {
  long long y1, y2, yw, xb, yb, r;
  cin >> y1 >> y2 >> yw >> xb >> yb >> r;
  yw -= r;
  long long ee = y1 + r;
  double mid = 1.0 * xb * (yw - ee) / (yw - ee + yw - yb);
  if (pdist(point(0, y2), point(0, ee), point(xb, yw * 2 - yb)) > r - 1e-10)
    printf("%.10lf\n", mid);
  else
    cout << "-1" << endl;
  return 0;
}
