#include <bits/stdc++.h>
template <typename A, typename B>
inline bool mins(A &x, B y) {
  return (x > y) ? (x = y, 1) : 0;
}
template <typename A, typename B>
inline bool maxs(A &x, B y) {
  return (x < y) ? (x = y, 1) : 0;
}
using namespace std;
double a, v, l, d, w, t;
int main() {
  cin >> a >> v >> l >> d >> w;
  if (v < w or w * w >= 2 * a * d) {
    if (v * v >= 2 * a * l) {
      printf("%.10f", sqrt(2 * l / a));
    } else {
      printf("%.10f", v / a + (l - (v * v) / (2 * a)) / v);
    }
  } else {
    if (v * v + (v - w) * (v - w) + 2 * (v - w) * w >= 2 * a * d) {
      t = (2 * sqrt(a * d + w * w / 2) - w) / a;
    } else {
      t = (2 * v - w) / a + (d + (w * w - 2 * v * v) / (2 * a)) / v;
    }
    if (2 * a * (l - d) <= (v - w) * (v - w) + 2 * (v - w) * w) {
      printf("%.10f", t + (sqrt(w * w - 2 * a * (d - l)) - w) / a);
    } else {
      printf(
          "%.10f",
          t + (v - w) / a +
              (l - d - (((v - w) * (v - w) + 2 * (v - w) * w) / (2 * a))) / v);
    }
  }
  return 0;
}
