using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace practice1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] buff = MYCP.ReadNumbers(5);
            int a, b, c, x, y;
            a = buff[0];
            b = buff[1];
            c = buff[2];
            x = buff[3];
            y = buff[4];
            c *= 2;

            int s, t;

            int min, yen, max;
            max = Math.Max(x, y);
            min = 2 * 5000 * 100000 + 100;

            for(int i = 0; i <= max; i++)
            {
                yen = c * i;
                s = x - i;
                t = y - i;
                s = Math.Max(0, s);
                t = Math.Max(0, t);
                yen += a * s;
                yen += b * t;

                if (min > yen) min = yen;
            }

            MYCP.PrintNumber(min);

            

            

        }
    }

    class MYCP
    {
        //標準出力の後改行する
        public static void Println(string str)
        {
            Console.WriteLine(str);
        }

        //標準出力の後改行しない
        public static void Print(string str)
        {
            Console.Write(str);
        }


        //int変数を標準出力する
        public static void PrintNumber(long number)
        {
            Console.WriteLine("" + number);
        }

        //あまり意味はない
        private static string MyScanf()
        {
            return Console.ReadLine();
        }

        //文字列を配列化して返す
        public static string[] MyScanfSplit()
        {
            return MyScanf().Split();
        }


        //double変数をソートする
        public static void MyDoubleSort(double[] boo)
        {
            if (boo.Length < 2) return;

            long i, count;
            double a;

            while (true)
            {
                count = 0;

                for (i = 0; i < boo.Length - 1; i++)
                {
                    if (boo[i] > boo[i + 1])
                    {
                        a = boo[i];
                        boo[i] = boo[i + 1];
                        boo[i + 1] = a;
                        count++;
                    }
                }

                if (count == 0) break;
            }
        }

        //int変数をソートする
        public static void MyIntSort(int[] boo)
        {
            if (boo.Length < 2) return;

            long i, count;
            int a;

            while (true)
            {
                count = 0;

                for (i = 0; i < boo.Length - 1; i++)
                {
                    if (boo[i] > boo[i + 1])
                    {
                        a = boo[i];
                        boo[i] = boo[i + 1];
                        boo[i + 1] = a;
                        count++;
                    }
                }

                if (count == 0) break;
            }
        }

        //int配列の和を返す。
        public static int MyIntSum(int[] a)
        {
            int sum = 0;
            for(int i = 0; i < a.Length; i++)
            {
                sum += a[i];
            }

            return sum;
        }

        //double配列の和を返す。
        public static double MyDoubleSum(double[] a)
        {
            double sum = 0;
            for(int i = 0; i < a.Length; i++)
            {
                sum += a[i];
            }

            return sum;
        }

        //指定された個数分int変数を読み取る
        public static int[] ReadNumbers(long number)
        {
            int[] a = new int[number];
            string[] buff = MyScanfSplit();
            for (long i = 0; i < number; i++)
            {
                a[i] = int.Parse(buff[i]);
            }

            return a;
        }

        //int配列の数字をすべて出力する
        public static void PrintNumbers(int[] a)
        {
            if (a.Length == 0) return;

            Console.Write(a[0]);

            for(int i = 1; i < a.Length; i++)
            {
                Console.Write(" ");
                Console.Write(a[i]);
            }

            Console.WriteLine();
        }

        //渡された自然数が素数か判定する
        public static bool PrimeCheck(int number)
        {
            if (number < 2) return false;

            int a = (int)Math.Sqrt(number);

            for(int i = 2; i <= a; i++)
            {
                if (number % i == 0) return false;
            }

            return true;
        }

        //渡された自然数が累乗数か判定する。累乗数ならtrueを返す。
        public static bool Bekizyousuu_Check(int number)
        {
            if (number == 1) return true;

            int i, copy;


            for (i = 2; i < number; i++)
            {
                copy = number;
                while (copy % i == 0)
                {
                    copy /= i;
                }

                if (copy == 1) return true;
            }

            return false;
        }
    }
}

Measured memory_bytes: 11092