#include <bits/stdc++.h>
typedef struct {
  long double a;
  long double v;
  long double l;
  long double d;
  long double w;
} input;
long double dist(long double t, long double v, long double a) {
  return ((long double)((a * t * t) / 2) + (v * t));
}
long double tt(long double d, long double v, long double a, long double vMax) {
  long double maxV = std::sqrt((2 * a * d) + (v * v));
  long double t = ((long double)(v + std::sqrt((v * v) + (2 * a * d))) / a);
  long double tMax = (long double)(vMax - v) / a;
  long double tMaxV = (long double)(maxV - v) / a;
  if (maxV > vMax) {
    if (tMax >= t) {
      return t;
    } else {
      return (long double)tMax + ((d - dist(tMax, v, a)) / vMax);
    }
  } else {
    return tMaxV;
  }
}
int main() {
  int c = 0;
  input x;
  long double t1 = 0;
  long double x1 = 0;
  long double t2 = 0;
  long double x2 = 0;
  long double x3 = 0;
  long double t3 = 0;
  long double y = 0;
  std::cin >> x.a >> x.v;
  std::cin >> x.l >> x.d >> x.w;
  if ((x.a >= 1 && x.a <= 10000) && (x.v >= 1 && x.v <= 10000) &&
      (x.l >= 2 && x.l <= 10000) && (x.d >= 1 && x.d < x.l) &&
      (x.w >= 1 && x.w <= 10000)) {
    if (x.v <= x.w) {
      y = tt(x.l, 0, x.a, x.v);
    } else {
      t1 = (long double)x.w / x.a;
      x1 = dist(t1, 0, x.a);
      if (x1 >= x.d) {
        y = tt(x.l, 0, x.a, x.v);
      } else {
        x2 = (long double)(x.d - x1) / 2;
        x3 = (x.l - x.d);
        y = t1 + 2 * tt(x2, x.w, x.a, x.v) + tt(x3, x.w, x.a, x.v);
      }
    }
    std::cout.precision(10);
    std::cout << y;
  }
}
