source_code: import static java.lang.Math.*;
  import static java.util.Arrays.*;
  import java.io.*;
  import java.util.*;
  
  public class Main {
  	static boolean LOCAL = System.getSecurityManager() == null;
  	Scanner sc = new Scanner(System.in);
  	
  	void run() {
  		double a = sc.nextDouble(), v = sc.nextDouble();
  		double L = sc.nextDouble(), d = sc.nextDouble(), w = sc.nextDouble();
  		w = min(w, v);
  		double t = 0;
  		if (w * w / (2 * a) <= d) {
  			if ((v * v + 2 * v * (v - w) - (v - w) * (v - w)) / (2 * a) <= d) {
  				t = (2 * v - w) / a + (d - (v * v + 2 * v * (v - w) - (v - w) * (v - w)) / (2 * a)) / v;
  			} else {
  				double A = a, B = w, C = (w * w) / (2 * a) - d;
  				t = w / a + (-B + sqrt(max(0, B * B - A * C))) / A * 2;
  			}
  			if ((2 * w * (v - w) + (v - w) * (v - w)) / (2 * a) <= L - d) {
  				t += (v - w) / a + (L - d - (2 * w * (v - w) + (v - w) * (v - w)) / (2 * a)) / v;
  			} else {
  				double A = a, B = w, C = -2 * (L - d);
  				t += (-B + sqrt(max(0, B * B - A * C))) / A;
  			}
  		} else if (v * v / (2 * a) <= L) {
  			t = v / a + (L - (v * v / (2 * a))) / v;
  		} else {
  			t = sqrt(2 * L / a);
  		}
  		System.out.printf("%.10f%n", t);
  	}
  	
  	class Scanner {
  		BufferedReader br;
  		StringTokenizer st;
  		Scanner(InputStream in) {
  			br = new BufferedReader(new InputStreamReader(in));
  			eat("");
  		}
  		void eat(String s) {
  			st = new StringTokenizer(s);
  		}
  		String nextLine() {
  			try {
  				return br.readLine();
  			} catch (IOException e) {
  				throw new RuntimeException(e);
  			}
  		}
  		boolean hasNext() {
  			while (!st.hasMoreTokens()) {
  				String s = nextLine();
  				if (s == null) return false;
  				eat(s);
  			}
  			return true;
  		}
  		String next() {
  			hasNext();
  			return st.nextToken();
  		}
  		int nextInt() {
  			return Integer.parseInt(next());
  		}
  		long nextLong() {
  			return Long.parseLong(next());
  		}
  		double nextDouble() {
  			return Double.parseDouble(next());
  		}
  	}
  	
  	void debug(Object...os) {
  		System.err.println(deepToString(os));
  	}
  	
  	public static void main(String[] args) {
  		if (LOCAL) {
  			try {
  				System.setIn(new FileInputStream("in.txt"));
  			} catch (Throwable e) {
  				LOCAL = false;
  			}
  		}
  		if (!LOCAL) {
  			try {
  				Locale.setDefault(Locale.US);
  				System.setOut(new PrintStream(new BufferedOutputStream(System.out)));
  			} catch (Throwable e) {
  			}
  		}
  		new Main().run();
  		System.out.flush();
  	}
  }
  