#include <bits/stdc++.h>
using namespace std;
int const MAXN = (int)1e5 + 100;
int const INF = (1 << 30) - 1;
double Y1, Y2, Yw, Xb, Yb, r;
double Xw;
struct Point {
  double x, y;
  Point() { x = y = 0.0; }
  Point(double _x, double _y) {
    x = _x;
    y = _y;
  }
  double dist2() { return (x * x + y * y); }
  double dist() { return sqrt(dist2()); }
  double dist2(Point p) {
    p.x -= x;
    p.y -= y;
    return p.dist2();
  }
  double dist(Point p) {
    p.x -= x;
    p.y -= y;
    return p.dist();
  }
  double scal(Point p) { return x * p.x + y * p.y; }
  Point operator*(double t) {
    x *= t;
    y *= t;
    return Point(x, y);
  }
  Point operator-(Point p) { return Point(x - p.x, y - p.y); }
  Point operator+(Point p) { return Point(x + p.x, y + p.y); }
  double projectionLen(Point A, Point B) {
    Point p = Point(x, y);
    double L = A.dist2(B);
    return ((p - A).scal(B - A)) / L;
  }
  double distToSegment2(Point A, Point B) {
    double t = projectionLen(A, B);
    return dist2(A + ((B - A) * t));
  }
};
int main() {
  cin >> Y1 >> Y2 >> Yw >> Xb >> Yb >> r;
  Xw = Xb * (Yw - r - (Y1 + r)) * 1.0 / (2 * Yw - 3 * r - Yb - Y1);
  Point A = Point(Xw, Yw - r);
  Point B = Point(0, Y1 + r);
  Point C = Point(0, Y2);
  double d = C.distToSegment2(A, B);
  if (d - r * r > 1e-7 && Xw > 1e-7) {
    printf("%.10f\n", Xw);
  } else {
    cout << -1 << endl;
  }
  return 0;
}
