#include <bits/stdc++.h>
using namespace std;
double a, v, l, d, w;
inline double distance_without_speed_limits(double v0, double ac, double t) {
  return t * v0 + ac * t * t / 2.;
}
inline double time_to_get_to_speed(double v0, double vt, double ac) {
  return (vt - v0) / ac;
}
inline double time_to_get_to_travel_without_speed_limit(double v0, double dis) {
  double A = a / 2.;
  double B = v0;
  double C = -dis;
  double delta = B * B - 4. * A * C;
  return (-B + sqrt(delta)) / (2. * A);
}
inline double time_to_travel(double v0, double dis) {
  double t1 = time_to_get_to_speed(v0, v, a);
  double d1 = distance_without_speed_limits(v0, a, t1);
  ;
  if (d1 > dis)
    return time_to_get_to_travel_without_speed_limit(v0, dis);
  else
    return t1 + (dis - d1) / v;
}
int main() {
  scanf("%lf%lf%lf%lf%lf", &a, &v, &l, &d, &w);
  w = min(w, v);
  double time_to_limit_speed = time_to_get_to_speed(0, w, a);
  double res;
  if (distance_without_speed_limits(0, a, time_to_limit_speed) > d) {
    ;
    res = time_to_travel(0, l);
  } else {
    res = time_to_limit_speed;
    double v0 = w;
    double covered = distance_without_speed_limits(0, a, time_to_limit_speed);
    ;
    l -= covered;
    d -= covered;
    double t1 = time_to_get_to_speed(v0, v, a);
    double d1 = distance_without_speed_limits(v0, a, t1);
    if (2. * d1 <= d) {
      ;
      res += t1 * 2.;
      res += (d - 2. * d1) / v;
    } else {
      ;
      res += 2. * time_to_travel(v0, d / 2.);
    }
    res += time_to_travel(w, l - d);
  }
  printf("%.9lf\n", res);
  return 0;
}
