#include <bits/stdc++.h>
using namespace std;
const double eps(1.0e-10);
const double mpi(acos(-1.0));
long double getLength(long double a, long double v, long double t) {
  return v * t + 0.5 * a * t * t;
}
long double getTime(long double a, long double v, long double L) {
  long double A = 0.5 * a, B = v, C = -L;
  return (-B + sqrt(abs(B * B - 4 * A * C))) / (2 * A);
}
class Solver {
  long double a, v;
  long double getSpendTime(long double initV, long double termV) {
    return (termV - initV) / a;
  }

 public:
  pair<long double, long double> getV_T(long double initV, long double termV,
                                        long double dist) {
    termV = min(termV, v);
    long double time_I_to_T = getSpendTime(initV, termV);
    long double len_I_to_T = getLength(a, initV, time_I_to_T);
    pair<long double, long double> ret;
    if (len_I_to_T < dist - eps) {
      long double remlen = abs(dist - len_I_to_T);
      long double acclen = len_I_to_T + remlen * 0.5;
      long double acctime = getTime(a, initV, acclen);
      ret.first = termV;
      if (acctime * a + initV < v - eps) {
        ret.second = acctime * 2 - time_I_to_T;
      } else {
        acctime = getSpendTime(initV, v);
        long double tmpTime = (acctime - time_I_to_T);
        long double tmpRem = abs(remlen - getLength(a, termV, tmpTime) * 2);
        tmpTime = tmpTime * 2 + tmpRem / v;
        ret.second = time_I_to_T + tmpTime;
      }
    } else {
      long double rt = getTime(a, initV, dist);
      long double rv = rt * a + initV;
      ret = make_pair(rv, rt);
    }
    return ret;
  }
  friend istream& operator>>(istream& is, Solver& solver) {
    return is >> solver.a >> solver.v;
  }
};
int main() {
  long double l, d, w;
  Solver solver;
  cin >> solver >> l >> d >> w;
  pair<long double, long double> f = solver.getV_T(0, w, d);
  pair<long double, long double> r = solver.getV_T(f.first, 100000000, l - d);
  cerr << f.first << " " << r.first << endl;
  cerr << f.second << " " << r.second << endl;
  printf("%.10lf\n", (double)(f.second + r.second));
  return 0;
}
