source_code: import java.io.*;
  import java.util.*;
  import java.math.*;
  
  public class Solution implements Runnable {
  	private BufferedReader in;
  	private PrintWriter out;
  	private StringTokenizer st;
  	private Random rnd;
  	
  	double Vend;
  	
  	private double calcFirstSegment(double a, double Vmax, double Vend, double l) {
  		double Vl = 0, Vr = Vmax;
  		
  		for(int it = 0; it < 256; it++) {
  			double Vm = (Vl + Vr) / 2.0;
  			
  			double tFirst = Vm / a;
  			
  			double tSecond = 0;
  			if(Vend < Vm) tSecond = (Vm - Vend) / a;
  			
  			double firstPart = a * tFirst * tFirst / 2.0;
  			double secondPart = Vm * tSecond - a * tSecond * tSecond / 2.0;
  			
  			double res = firstPart + secondPart;
  			
  			if(res < l) Vl = Vm;
  			else Vr = Vm;
  		}
  		
  		this.Vend = Math.min(Vl, Vend);
  		
  		double res = 0.0;
  		
  		{
  			double Vm = Vl;
  			
  			double tFirst = Vm / a;
  			double tSecond = 0;
  			if(Vend < Vm) tSecond = (Vm - Vend) / a;
  			
  			//out.println(tSecond);
  			
  			double firstPart = a * tFirst * tFirst / 2.0;
  			double secondPart = Vm * tSecond - a * tSecond * tSecond / 2.0;
  			
  			double remain = l - firstPart - secondPart;
  			
  			res = tFirst + tSecond + (remain / Vm);
  		}
  		
  		return res;
  	}
  	
  	private double calcSecondPart(double a, double Vmax, double Vstart, double l) {
  		double Vl = Vstart, Vr = Vmax;
  		
  		//out.println(Vstart);
  		
  		for(int it = 0; it < 256; it++) {
  			double Vm = (Vl + Vr) / 2.0;
  			double t = (Vm - Vstart) / a;
  			
  			double s = Vstart * t + a * t * t / 2.0;
  			
  			if(s < l) Vl = Vm;
  			else Vr = Vm;
  		}
  		
  		double res = 0.0;
  		
  		{
  			double Vm = (Vl + Vr) / 2.0;
  			double t = (Vm - Vstart) / a;
  			
  			double s = Vstart * t + a * t * t / 2.0;
  			
  			double remain = l - s;
  			
  			res = t + (remain / Vmax);
  		}
  		
  		return res;
  	}
  	
  	public void solve() throws IOException {
  		double a = nextDouble(), v = nextDouble(), l = nextDouble(), d = nextDouble(), w = nextDouble();
  		
  		double res = calcFirstSegment(a, v, w, d);
  		res += calcSecondPart(a, v, Vend, l - d);
  		
  		out.println(res);
  	}
  		
  	public static void main(String[] args) {
  		new Solution().run();
  	} 
  	
  	public void run() {
  		try {
  			//in = new BufferedReader(new FileReader("input.txt"));
  			//out = new PrintWriter(new FileWriter("output.txt"));
  			
  			in = new BufferedReader(new InputStreamReader((System.in)));
  			out = new PrintWriter(System.out);
  			
  			st = null;
  			rnd = new Random();
  			
  			solve();
  			
  			out.close();
  		} catch(IOException e) {
  			e.printStackTrace();
  		}	
  	}
  	
  	private String nextToken() throws IOException, NullPointerException {
  		while(st == null || !st.hasMoreTokens()) {
  			st = new StringTokenizer(in.readLine());
  		}
  		
  		return st.nextToken();
  	}
  	
  	private int nextInt() throws IOException {
  		return Integer.parseInt(nextToken());
  	}
  	
  	private long nextLong() throws IOException {
  		return Long.parseLong(nextToken());
  	}
  	
  	private double nextDouble() throws IOException {
  		return Double.parseDouble(nextToken());
  	}
  
  }