
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	private static final long MOD = (long)Math.pow(10, 9) + 7;
	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		int x = sc.nextInt();
		int y = sc.nextInt();
		long res = 0;
		int abh = 2 * c; // a + b
		
		// buy a + b
		int buyab = Math.min(x, y);
		res += buyab * Math.min(a+b, abh);
		
		x -= buyab;
		y -= buyab;
		
		// buy a
		if (x > 0) { res += (x * Math.min(a, abh)); }
		
		// buy b
		if (y > 0) { res += (y * Math.min(b, abh)); }
		
		System.out.println(res);
	}
	
	private static int findNiconicoLevel(String s) {
		int res = 0;
		String prev = "";
		int pos = 1;
		int level = 0;
		while (pos < s.length()) {
			String curr = "" + s.charAt(pos - 1) + s.charAt(pos);
			if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			}
		}
		
		return res;
	}
	
	private static String nTimesChar(char c, int t) {
		String res = "";
		for (int i = 0; i < t; i++) {
			res += c;
		}
		return res;
	}
	
	static class FastReader {
	    BufferedReader br;
	    StringTokenizer st;
	
	    public FastReader() {
	      br = new BufferedReader(new InputStreamReader(System.in));
	    }
	  
	    String next() { 
	      while (st == null || !st.hasMoreElements()) {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      }
	      return st.nextToken();
	    }
	
	    int nextInt() {
	      return Integer.parseInt(next());
	    }
	
	    long nextLong() {
	      return Long.parseLong(next());
	    }
	
	    double nextDouble() { 
	      return Double.parseDouble(next());
	    }
	
	    String nextLine() {
	      String str = "";
	        try{
	            str = br.readLine();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return str;
	      }
	  }
} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.Arrays; Arrays java.util import java.util.StringTokenizer; StringTokenizer java.util public class Main {
	private static final long MOD = (long)Math.pow(10, 9) + 7;
	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		int x = sc.nextInt();
		int y = sc.nextInt();
		long res = 0;
		int abh = 2 * c; // a + b
		
		// buy a + b
		int buyab = Math.min(x, y);
		res += buyab * Math.min(a+b, abh);
		
		x -= buyab;
		y -= buyab;
		
		// buy a
		if (x > 0) { res += (x * Math.min(a, abh)); }
		
		// buy b
		if (y > 0) { res += (y * Math.min(b, abh)); }
		
		System.out.println(res);
	}
	
	private static int findNiconicoLevel(String s) {
		int res = 0;
		String prev = "";
		int pos = 1;
		int level = 0;
		while (pos < s.length()) {
			String curr = "" + s.charAt(pos - 1) + s.charAt(pos);
			if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			}
		}
		
		return res;
	}
	
	private static String nTimesChar(char c, int t) {
		String res = "";
		for (int i = 0; i < t; i++) {
			res += c;
		}
		return res;
	}
	
	static class FastReader {
	    BufferedReader br;
	    StringTokenizer st;
	
	    public FastReader() {
	      br = new BufferedReader(new InputStreamReader(System.in));
	    }
	  
	    String next() { 
	      while (st == null || !st.hasMoreElements()) {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      }
	      return st.nextToken();
	    }
	
	    int nextInt() {
	      return Integer.parseInt(next());
	    }
	
	    long nextLong() {
	      return Long.parseLong(next());
	    }
	
	    double nextDouble() { 
	      return Double.parseDouble(next());
	    }
	
	    String nextLine() {
	      String str = "";
	        try{
	            str = br.readLine();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return str;
	      }
	  }
} Main private static final long MOD = (long)Math.pow(10, 9) + 7; MOD (long)Math.pow(10, 9) + 7 (long)Math.pow(10, 9) Math.pow Math 10 9 7 public static void main(String[] args) {
		FastReader sc = new FastReader();
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		int x = sc.nextInt();
		int y = sc.nextInt();
		long res = 0;
		int abh = 2 * c; // a + b
		
		// buy a + b
		int buyab = Math.min(x, y);
		res += buyab * Math.min(a+b, abh);
		
		x -= buyab;
		y -= buyab;
		
		// buy a
		if (x > 0) { res += (x * Math.min(a, abh)); }
		
		// buy b
		if (y > 0) { res += (y * Math.min(b, abh)); }
		
		System.out.println(res);
	} main {
		FastReader sc = new FastReader();
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		int x = sc.nextInt();
		int y = sc.nextInt();
		long res = 0;
		int abh = 2 * c; // a + b
		
		// buy a + b
		int buyab = Math.min(x, y);
		res += buyab * Math.min(a+b, abh);
		
		x -= buyab;
		y -= buyab;
		
		// buy a
		if (x > 0) { res += (x * Math.min(a, abh)); }
		
		// buy b
		if (y > 0) { res += (y * Math.min(b, abh)); }
		
		System.out.println(res);
	} FastReader sc = new FastReader(); sc new FastReader() int a = sc.nextInt(); a sc.nextInt() sc.nextInt sc int b = sc.nextInt(); b sc.nextInt() sc.nextInt sc int c = sc.nextInt(); c sc.nextInt() sc.nextInt sc int x = sc.nextInt(); x sc.nextInt() sc.nextInt sc int y = sc.nextInt(); y sc.nextInt() sc.nextInt sc long res = 0; res 0 int abh = 2 * c; abh 2 * c 2 c int buyab = Math.min(x, y); buyab Math.min(x, y) Math.min Math x y res += buyab * Math.min(a+b, abh) res buyab * Math.min(a+b, abh) buyab Math.min(a+b, abh) Math.min Math a+b a b abh x -= buyab x buyab y -= buyab y buyab if (x > 0) { res += (x * Math.min(a, abh)); } x > 0 x 0 { res += (x * Math.min(a, abh)); } res += (x * Math.min(a, abh)) res (x * Math.min(a, abh)) x Math.min(a, abh) Math.min Math a abh if (y > 0) { res += (y * Math.min(b, abh)); } y > 0 y 0 { res += (y * Math.min(b, abh)); } res += (y * Math.min(b, abh)) res (y * Math.min(b, abh)) y Math.min(b, abh) Math.min Math b abh System.out.println(res) System.out.println System.out System System.out res String[] args args private static int findNiconicoLevel(String s) {
		int res = 0;
		String prev = "";
		int pos = 1;
		int level = 0;
		while (pos < s.length()) {
			String curr = "" + s.charAt(pos - 1) + s.charAt(pos);
			if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			}
		}
		
		return res;
	} findNiconicoLevel {
		int res = 0;
		String prev = "";
		int pos = 1;
		int level = 0;
		while (pos < s.length()) {
			String curr = "" + s.charAt(pos - 1) + s.charAt(pos);
			if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			}
		}
		
		return res;
	} int res = 0; res 0 String prev = ""; prev "" int pos = 1; pos 1 int level = 0; level 0 while (pos < s.length()) {
			String curr = "" + s.charAt(pos - 1) + s.charAt(pos);
			if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			}
		} pos < s.length() pos s.length() s.length s {
			String curr = "" + s.charAt(pos - 1) + s.charAt(pos);
			if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			}
		} String curr = "" + s.charAt(pos - 1) + s.charAt(pos); curr "" + s.charAt(pos - 1) + s.charAt(pos) "" + s.charAt(pos - 1) + s.charAt(pos) "" s.charAt(pos - 1) s.charAt s pos - 1 pos 1 s.charAt(pos) s.charAt s pos if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			} curr.equals("25") curr.equals curr "25" {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				} prev.equals("25") prev.equals prev "25" {
					level += 2;
				} level += 2 level 2 {
					prev = "25";
					level = 2;
				} prev = "25" prev "25" level = 2 level 2 res = Math.max(res, level) res Math.max(res, level) Math.max Math res level pos += 2 pos 2 {
				level = 0;
				prev = "";
				pos++;
			} level = 0 level 0 prev = "" prev "" pos++ pos return res; res String s s private static String nTimesChar(char c, int t) {
		String res = "";
		for (int i = 0; i < t; i++) {
			res += c;
		}
		return res;
	} nTimesChar {
		String res = "";
		for (int i = 0; i < t; i++) {
			res += c;
		}
		return res;
	} String res = ""; res "" for (int i = 0; i < t; i++) {
			res += c;
		} int i = 0; int i = 0; i 0 i < t i t i++ i++ i {
			res += c;
		} {
			res += c;
		} res += c res c return res; res char c c int t t static class FastReader {
	    BufferedReader br;
	    StringTokenizer st;
	
	    public FastReader() {
	      br = new BufferedReader(new InputStreamReader(System.in));
	    }
	  
	    String next() { 
	      while (st == null || !st.hasMoreElements()) {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      }
	      return st.nextToken();
	    }
	
	    int nextInt() {
	      return Integer.parseInt(next());
	    }
	
	    long nextLong() {
	      return Long.parseLong(next());
	    }
	
	    double nextDouble() { 
	      return Double.parseDouble(next());
	    }
	
	    String nextLine() {
	      String str = "";
	        try{
	            str = br.readLine();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return str;
	      }
	  } FastReader BufferedReader br; br StringTokenizer st; st public FastReader() {
	      br = new BufferedReader(new InputStreamReader(System.in));
	    } FastReader {
	      br = new BufferedReader(new InputStreamReader(System.in));
	    } br = new BufferedReader(new InputStreamReader(System.in)) br new BufferedReader(new InputStreamReader(System.in)) String next() { 
	      while (st == null || !st.hasMoreElements()) {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      }
	      return st.nextToken();
	    } next { 
	      while (st == null || !st.hasMoreElements()) {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      }
	      return st.nextToken();
	    } while (st == null || !st.hasMoreElements()) {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      } st == null || !st.hasMoreElements() st == null st null !st.hasMoreElements() st.hasMoreElements() st.hasMoreElements st {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      } try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        } catch (IOException  e) {
	          e.printStackTrace();
	        } IOException  e {
	          e.printStackTrace();
	        } e.printStackTrace() e.printStackTrace e {
	          st = new StringTokenizer(br.readLine());
	        } st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) return st.nextToken(); st.nextToken() st.nextToken st int nextInt() {
	      return Integer.parseInt(next());
	    } nextInt {
	      return Integer.parseInt(next());
	    } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next long nextLong() {
	      return Long.parseLong(next());
	    } nextLong {
	      return Long.parseLong(next());
	    } return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next double nextDouble() { 
	      return Double.parseDouble(next());
	    } nextDouble { 
	      return Double.parseDouble(next());
	    } return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next String nextLine() {
	      String str = "";
	        try{
	            str = br.readLine();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return str;
	      } nextLine {
	      String str = "";
	        try{
	            str = br.readLine();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return str;
	      } String str = ""; str "" try{
	            str = br.readLine();
	        } catch (IOException e) {
	            e.printStackTrace();
	        } catch (IOException e) {
	            e.printStackTrace();
	        } IOException e {
	            e.printStackTrace();
	        } e.printStackTrace() e.printStackTrace e {
	            str = br.readLine();
	        } str = br.readLine() str br.readLine() br.readLine br return str; str public class Main {
	private static final long MOD = (long)Math.pow(10, 9) + 7;
	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		int x = sc.nextInt();
		int y = sc.nextInt();
		long res = 0;
		int abh = 2 * c; // a + b
		
		// buy a + b
		int buyab = Math.min(x, y);
		res += buyab * Math.min(a+b, abh);
		
		x -= buyab;
		y -= buyab;
		
		// buy a
		if (x > 0) { res += (x * Math.min(a, abh)); }
		
		// buy b
		if (y > 0) { res += (y * Math.min(b, abh)); }
		
		System.out.println(res);
	}
	
	private static int findNiconicoLevel(String s) {
		int res = 0;
		String prev = "";
		int pos = 1;
		int level = 0;
		while (pos < s.length()) {
			String curr = "" + s.charAt(pos - 1) + s.charAt(pos);
			if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			}
		}
		
		return res;
	}
	
	private static String nTimesChar(char c, int t) {
		String res = "";
		for (int i = 0; i < t; i++) {
			res += c;
		}
		return res;
	}
	
	static class FastReader {
	    BufferedReader br;
	    StringTokenizer st;
	
	    public FastReader() {
	      br = new BufferedReader(new InputStreamReader(System.in));
	    }
	  
	    String next() { 
	      while (st == null || !st.hasMoreElements()) {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      }
	      return st.nextToken();
	    }
	
	    int nextInt() {
	      return Integer.parseInt(next());
	    }
	
	    long nextLong() {
	      return Long.parseLong(next());
	    }
	
	    double nextDouble() { 
	      return Double.parseDouble(next());
	    }
	
	    String nextLine() {
	      String str = "";
	        try{
	            str = br.readLine();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return str;
	      }
	  }
} public class Main {
	private static final long MOD = (long)Math.pow(10, 9) + 7;
	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		int x = sc.nextInt();
		int y = sc.nextInt();
		long res = 0;
		int abh = 2 * c; // a + b
		
		// buy a + b
		int buyab = Math.min(x, y);
		res += buyab * Math.min(a+b, abh);
		
		x -= buyab;
		y -= buyab;
		
		// buy a
		if (x > 0) { res += (x * Math.min(a, abh)); }
		
		// buy b
		if (y > 0) { res += (y * Math.min(b, abh)); }
		
		System.out.println(res);
	}
	
	private static int findNiconicoLevel(String s) {
		int res = 0;
		String prev = "";
		int pos = 1;
		int level = 0;
		while (pos < s.length()) {
			String curr = "" + s.charAt(pos - 1) + s.charAt(pos);
			if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			}
		}
		
		return res;
	}
	
	private static String nTimesChar(char c, int t) {
		String res = "";
		for (int i = 0; i < t; i++) {
			res += c;
		}
		return res;
	}
	
	static class FastReader {
	    BufferedReader br;
	    StringTokenizer st;
	
	    public FastReader() {
	      br = new BufferedReader(new InputStreamReader(System.in));
	    }
	  
	    String next() { 
	      while (st == null || !st.hasMoreElements()) {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      }
	      return st.nextToken();
	    }
	
	    int nextInt() {
	      return Integer.parseInt(next());
	    }
	
	    long nextLong() {
	      return Long.parseLong(next());
	    }
	
	    double nextDouble() { 
	      return Double.parseDouble(next());
	    }
	
	    String nextLine() {
	      String str = "";
	        try{
	            str = br.readLine();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return str;
	      }
	  }
} Main

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	private static final long MOD = (long)Math.pow(10, 9) + 7;
	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		int x = sc.nextInt();
		int y = sc.nextInt();
		long res = 0;
		int abh = 2 * c; // a + b
		
		// buy a + b
		int buyab = Math.min(x, y);
		res += buyab * Math.min(a+b, abh);
		
		x -= buyab;
		y -= buyab;
		
		// buy a
		if (x > 0) { res += (x * Math.min(a, abh)); }
		
		// buy b
		if (y > 0) { res += (y * Math.min(b, abh)); }
		
		System.out.println(res);
	}
	
	private static int findNiconicoLevel(String s) {
		int res = 0;
		String prev = "";
		int pos = 1;
		int level = 0;
		while (pos < s.length()) {
			String curr = "" + s.charAt(pos - 1) + s.charAt(pos);
			if (curr.equals("25")) {
				if (prev.equals("25")) {
					level += 2;
				} else {
					prev = "25";
					level = 2;
				}
				res = Math.max(res, level);
				pos += 2;
			} else {
				level = 0;
				prev = "";
				pos++;
			}
		}
		
		return res;
	}
	
	private static String nTimesChar(char c, int t) {
		String res = "";
		for (int i = 0; i < t; i++) {
			res += c;
		}
		return res;
	}
	
	static class FastReader {
	    BufferedReader br;
	    StringTokenizer st;
	
	    public FastReader() {
	      br = new BufferedReader(new InputStreamReader(System.in));
	    }
	  
	    String next() { 
	      while (st == null || !st.hasMoreElements()) {
	        try {
	          st = new StringTokenizer(br.readLine());
	        } catch (IOException  e) {
	          e.printStackTrace();
	        }
	      }
	      return st.nextToken();
	    }
	
	    int nextInt() {
	      return Integer.parseInt(next());
	    }
	
	    long nextLong() {
	      return Long.parseLong(next());
	    }
	
	    double nextDouble() { 
	      return Double.parseDouble(next());
	    }
	
	    String nextLine() {
	      String str = "";
	        try{
	            str = br.readLine();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return str;
	      }
	  }
}
