Problem:
Score : 100 points

Problem Statement

There are two rectangles.
The lengths of the vertical sides of the first rectangle are A, and the lengths of the horizontal sides of the first rectangle are B.
The lengths of the vertical sides of the second rectangle are C, and the lengths of the horizontal sides of the second rectangle are D.

Print the area of the rectangle with the larger area.
If the two rectangles have equal areas, print that area.

Constraints

All input values are integers.

1≤A≤10^4

1≤B≤10^4

1≤C≤10^4

1≤D≤10^4

Input

The input is given from Standard Input in the following format:

A B C D

Output

Print the area of the rectangle with the larger area.
If the two rectangles have equal areas, print that area.

Sample Input 1

3 5 2 7

Sample Output 1

15

The first rectangle has an area of 3×5=15, and the second rectangle has an area of 2×7=14.
Thus, the output should be 15, the larger area.

Sample Input 2

100 600 200 300

Sample Output 2

60000

Solution in C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
namespace AtCoder {
    class MainClass {

        int A,B,C,D;
        void Solve() {
            io.i(out A, out B, out C,out D);

            int ans = A * B > C * D ? A * B : C * D;

            io.o(ans);

        }

        int ManhattanDis(int x1, int y1, int x2, int y2) {
            return Math.Abs(x1 - x2) + Math.Abs(y1 - y2);
        }

        public static void Main(string[] args) { new MainClass().Stream(); }
        IO io = new IO();
        void Stream() { Solve(); io.writeFlush(); }

        class IO {
            string[] nextBuffer; int BufferCnt; char[] cs = new char[] { ' ' };
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
            public IO() { nextBuffer = new string[0]; BufferCnt = 0; Console.SetOut(sw); }
            public string next() {
                if (BufferCnt < nextBuffer.Length) return nextBuffer[BufferCnt++];
                string st = Console.ReadLine();
                while (st == "") st = Console.ReadLine();
                nextBuffer = st.Split(cs, StringSplitOptions.RemoveEmptyEntries);
                BufferCnt = 0;
                return nextBuffer[BufferCnt++];
            }
            public char nextChar() { return char.Parse(next()); }
            public int nextInt() { return int.Parse(next()); }
            public long nextLong() { return long.Parse(next()); }
            public double nextDouble() { return double.Parse(next()); }
            public string[] array() { return Console.ReadLine().Split(' '); }
            public char[] arrayChar() { return Array.ConvertAll(array(), char.Parse); }
            public int[] arrayInt() { return Array.ConvertAll(array(), int.Parse); }
            public long[] arrayLong() { return Array.ConvertAll(array(), long.Parse); }
            public double[] arrayDouble() { return Array.ConvertAll(array(), double.Parse); }
            private bool typeEQ<T, U>() { return typeof(T).Equals(typeof(U)); }
            private T convertType<T, U>(U v) { return (T)Convert.ChangeType(v, typeof(T)); }
            private T suitType<T>(string s) {
                if (typeEQ<T, int>()) return convertType<T, int>(int.Parse(s));
                if (typeEQ<T, long>()) return convertType<T, long>(long.Parse(s));
                if (typeEQ<T, double>()) return convertType<T, double>(double.Parse(s));
                if (typeEQ<T, char>()) return convertType<T, char>(char.Parse(s));
                return convertType<T, string>(s);
            }
            public void i<T>(out T v) { v = suitType<T>(next()); }
            public void i<T, U>(out T v1, out U v2) {
                var a = array(); v1 = suitType<T>(a[0]); v2 = suitType<U>(a[1]);
            }
            public void i<T, U, V>(out T v1, out U v2, out V v3) {
                var a = array(); v1 = suitType<T>(a[0]); v2 = suitType<U>(a[1]);
                v3 = suitType<V>(a[2]);
            }

            public void i<T, U, V, W>(out T v1, out U v2, out V v3, out W v4) {
                var a = array(); v1 = suitType<T>(a[0]); v2 = suitType<U>(a[1]);
                v3 = suitType<V>(a[2]); v4 = suitType<W>(a[3]);
            }
            public void o<T>(T v) { Console.WriteLine(v); }
            public void o<T>(T[] a) { foreach (T v in a) Console.WriteLine(v); }
            public void o<T>(List<T> l) { foreach (T v in l) sw.WriteLine(v); }
            public void writeFlush() { Console.Out.Flush(); }
        }

        class Mathf {
            public int mod = 1000000007;//10^9+7
            public long Pow(long a, long b) {
                if (b == 0) return 1;
                if (b % 2 == 1) return (a % mod * Pow(a % mod, b - 1) % mod) % mod;
                else return Pow(a * a % mod, b / 2) % mod;
            }
            public long Fact(long n) { return n != 0 ? (n % mod * (Fact(n - 1) % mod) % mod) : 1; }
            public long C(long n, long r) {
                if (r == 0 || n == r) return 1;
                else return (Fact(n) % mod * Pow((Fact(n - r) % mod * Fact(r) % mod) % mod, mod - 2) % mod) % mod;
            }
            public int GCD(int a, int b) { if (a < b) Swap(ref a, ref b); return b == 0 ? a : GCD(b, a % b); }
            public int GCD(int[] array) { return array.Aggregate((v, next) => GCD(v, next)); }
            public void Swap<T>(ref T a, ref T b) { T tmp = a; a = b; b = tmp; }
            public T Max<T>(params T[] v) { return v.Max(); }
            public T Min<T>(params T[] v) { return v.Min(); }
        }
    }
}