#include <bits/stdc++.h>
using namespace std;
inline int rd() {
  int x = 0, f = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = -1;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return x * f;
}
double a, v, L, D, limit;
double varrive;
double calc_tim_1() {
  double ret = 0;
  if (v < limit) {
    if (sqrt(2.0 * a * D) > v) {
      double x1 = 1.0 * v * v / 2.0 / a, t1 = v / a;
      double x2 = D - x1, t2 = 1.0 * x2 / v;
      ret = t1 + t2;
      varrive = v;
    } else {
      varrive = sqrt(2.0 * a * D);
      ret = varrive / a;
    }
  } else {
    if (sqrt(2.0 * a * D) >= limit) {
      varrive = limit;
      double v_peak = sqrt(limit * limit / 2.0 + a * D);
      if (v_peak <= v) {
        ret = v_peak / a + (v_peak - limit) / a;
      } else {
        double t_mid =
            (D - v * v / 2.0 / a - (v * v - limit * limit) / 2.0 / a) / v;
        ret = t_mid + v / a + (v - limit) / a;
      }
    } else {
      varrive = sqrt(2.0 * a * D);
      ret = varrive / a;
    }
  }
  return ret;
}
double calc_tim_2() {
  double ret = 0;
  double ideal_arrive_v = sqrt(varrive * varrive + 2.0 * a * (L - D));
  if (ideal_arrive_v > v) {
    double x1 = (v * v - varrive * varrive) / 2.0 / a, t1 = (v - varrive) / a;
    double x2 = (L - D) - x1, t2 = x2 / v;
    ret = t1 + t2;
  } else {
    ret = (ideal_arrive_v - varrive) / a;
  }
  return ret;
}
int main() {
  a = rd(), v = rd(), L = rd(), D = rd(), limit = rd();
  double tim1 = calc_tim_1();
  double tim2 = calc_tim_2();
  double ans = tim1 + tim2;
  printf("%.15lf\n", ans);
  return 0;
}
