#include <bits/stdc++.h>
using namespace std;
const int MaxN = 10004;
const double MaxC = 1E10;
double a, v, l, d, w;
void dist(double& dr, double& vr, double v0, double t0) {
  double t;
  t = (v - v0) / a;
  if (t > t0) t = t0;
  vr = v0 + a * t;
  dr = v0 * t + a * t * t * 0.5;
  dr += v * (t0 - t);
}
int main(void) {
  double s1, s2, s3, v1, v2, v3;
  double tlo, tme, thi, res;
  int i;
  while (scanf(" %lf %lf %lf %lf %lf", &a, &v, &l, &d, &w) != EOF) {
    w = min(w, v);
    w = min(w, a * sqrt(d * 2.0 / a));
    tlo = 0.0;
    thi = MaxC;
    for (i = 0; i < 200; i++) {
      tme = (tlo + thi) * 0.5;
      dist(s1, v1, 0.0, tme);
      if (s1 > d) {
        thi = tme;
        continue;
      }
      if (v1 < w) {
        tlo = tme;
        continue;
      }
      dist(s2, v2, w, (v1 - w) / a);
      if (s1 + s2 > d)
        thi = tme;
      else
        tlo = tme;
    }
    dist(s1, v1, 0.0, tlo);
    res = tlo + (v1 - w) / a;
    tlo = 0.0;
    thi = MaxC;
    for (i = 0; i < 200; i++) {
      tme = (tlo + thi) * 0.5;
      dist(s3, v3, w, tme);
      if (s3 > l - d)
        thi = tme;
      else
        tlo = tme;
    }
    printf("%.10lf\n", res + tlo);
  }
  return 0;
}
