#include <bits/stdc++.h>
using namespace std;
long long fpm(long long b, long long e, long long m) {
  long long t = 1;
  for (; e; e >>= 1, b = b * b % m) e & 1 ? t = t * b % m : 0;
  return t;
}
template <class T>
inline bool chkmin(T &a, T b) {
  return a > b ? a = b, true : false;
}
template <class T>
inline bool chkmax(T &a, T b) {
  return a < b ? a = b, true : false;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class edge>
struct Graph {
  vector<vector<edge> > adj;
  Graph(int n) {
    adj.clear();
    adj.resize(n + 5);
  }
  Graph() { adj.clear(); }
  void resize(int n) { adj.resize(n + 5); }
  void add(int s, edge e) { adj[s].push_back(e); }
  void del(int s, edge e) { adj[s].erase(find(iter(adj[s]), e)); }
  int deg(int v) { return adj[v].size(); }
  vector<edge> &operator[](int t) { return adj[t]; }
};
struct crd {
  long double x, y, z;
};
long double eps = (long double)1e-8;
crd operator^(crd a, crd b) {
  return (crd){a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z,
               a.x * b.y - a.y * b.x};
}
long double operator*(crd a, crd b) {
  return a.x * b.x + a.y * b.y + a.z * b.z;
}
int main() {
  ios_base::sync_with_stdio(false);
  long double y1, y2, yw, xb, yb, R;
  cin >> y1 >> y2 >> yw >> xb >> yb >> R;
  yw -= R, y1 += R;
  yb = 2 * yw - yb;
  crd A = (crd){0, y1 + eps, 1}, B = (crd){xb, yb, 1}, L = A ^ B;
  if (abs((crd){0, y2, 1} * L) / hypot(L.x, L.y) <= R)
    return cout << -1 << endl, 0;
  crd k = (crd){0, 1, -yw}, p = k ^ L;
  cout << setprecision(15) << p.x / p.z << endl;
  return 0;
}
