#include <bits/stdc++.h>
using namespace std;
long double xtimeof(long double dx, long double a, long double v0) {
  if (a == 0) return dx / v0;
  long double za = .5 * a;
  long double zb = v0;
  long double zc = -dx;
  long double delta = pow(zb, 2) - 4 * za * zc;
  delta = sqrt(delta);
  long double up1 = -zb + delta;
  long double up2 = -zb - delta;
  long double down = 2 * za;
  up1 /= down;
  up2 /= down;
  cerr << dx << ' ' << a << ' ' << v0 << ": " << za << ' ' << zb << ' ' << zc
       << ": " << delta << ' ' << up1 << ' ' << up2 << endl;
  if (up1 < 0) return up2;
  if (up2 < 0) return up1;
  return min(up1, up2);
}
long double distof(long double v1, long double v2, long double a) {
  return (pow(v2, 2) - pow(v1, 2)) / (2 * a);
}
long double get(long double dx, long double a, long double v0,
                long double vmax) {
  long double disl = distof(v0, vmax, a);
  if (disl <= dx) {
    cerr << "moving " << disl << "km with rising acc and " << dx - disl
         << "km with const speed" << endl;
    cerr << xtimeof(disl, a, v0) << endl << xtimeof(dx - disl, 0, vmax) << endl;
    return xtimeof(disl, a, v0) + xtimeof(dx - disl, 0, vmax);
  }
  return xtimeof(dx, a, v0);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout.precision(10);
  long double a, v, l, d, w;
  cin >> a >> v >> l >> d >> w;
  (w) = min((w), (v));
  long double disl = distof(0, v, a);
  long double disr = distof(v, w, -a);
  long double ltime, rbegin;
  if (disl + disr < d) {
    cerr << "can reach vmax" << endl;
    cerr << "moving first " << disl << "km with positive accelration" << endl;
    cerr << "moving next " << disr << "km with negative accelration" << endl;
    ltime = xtimeof(disl, a, 0) + xtimeof(disr, -a, v) +
            xtimeof(d - (disl + disr), 0, v);
    rbegin = w;
  } else {
    cerr << "can NOT reach vmax" << endl;
    long double m;
    {
      long double hi = v;
      long double lo = 0;
      for (int i = 0; i < 1000; i++) {
        long double mid = (lo + hi) / 2;
        long double disl = distof(0, mid, a);
        long double disr = mid < w ? 0 : distof(mid, w, -a);
        if (disl + disr <= d)
          lo = mid;
        else
          hi = mid;
      }
      m = lo;
    }
    cerr << "reaching " << m << " as top speed" << endl;
    disl = distof(0, m, a);
    disr = m < w ? 0 : distof(m, w, -a);
    ltime = xtimeof(disl, a, 0) + xtimeof(disr, -a, m);
    rbegin = min(m, w);
  }
  cerr << "passed the speed limit point with speed " << rbegin << "km/h in "
       << ltime << "h" << endl;
  long double ans = ltime + get(l - d, a, rbegin, v);
  cout << fixed << ans << '\n';
  return 0;
}
