#include <bits/stdc++.h>
const int mod = 1e9 + 7;
const int N = 200010;
const int inf = 0x3f3f3f3f;
using namespace std;
double A, V, L, D, W;
struct Data {
  double t, v;
  Data() {}
  Data(double t, double v) : t(t), v(v) {}
};
Data tripAcceleration(double v, double d, double a) {
  double t = (V - v) / a;
  if (d >= t * (v + V) / 2) {
    d -= t * (v + V) / 2;
    t += d / V;
    return Data(t, V);
  }
  double x = sqrt(v * v + 2 * a * d);
  return Data((x - v) / a, x);
}
Data tripDeceleration(double v, double d, double a) {
  if (v * v < 2 * a * d) return Data(1e9, 0);
  double x = sqrt(v * v - 2 * a * d);
  return Data((v - x) / a, x);
}
int main() {
  cin >> A >> V >> L >> D >> W;
  Data da1 = tripAcceleration(0, D, A);
  if (da1.v <= W) {
    Data da2 = tripAcceleration(da1.v, L - D, A);
    printf("%.15f\n", da1.t + da2.t);
  } else {
    double l = 0, r = D;
    for (int i = 0; i < 100; i++) {
      double mid = (l + r) / 2;
      Data tmp = tripAcceleration(0, mid, A);
      Data tmp1 = tripDeceleration(tmp.v, D - mid, A);
      if (tmp1.t > 1e9 - 1)
        l = mid;
      else {
        if (tmp1.v > W)
          r = mid;
        else
          l = mid;
      }
    }
    da1 = tripAcceleration(0, l, A);
    Data da2 = tripDeceleration(da1.v, D - l, A);
    Data da3 = tripAcceleration(da2.v, L - D, A);
    printf("%.15f\n", da1.t + da2.t + da3.t);
  }
  return 0;
}
