Problem:
Score : 100 points

Problem Statement

You are parking at a parking lot. You can choose from the following two fee plans:

Plan 1: The fee will be A×T yen (the currency of Japan) when you park for T hours.

Plan 2: The fee will be B yen, regardless of the duration.

Find the minimum fee when you park for N hours.

Constraints

1≤N≤20

1≤A≤100

1≤B≤2000

All input values are integers.

Input

Input is given from Standard Input in the following format:

N A B

Output

When the minimum fee is x yen, print the value of x.

Sample Input 1

7 17 120

Sample Output 1

119

If you choose Plan 1, the fee will be 7×17=119 yen.

If you choose Plan 2, the fee will be 120 yen.

Thus, the minimum fee is 119 yen.

Sample Input 2

5 20 100

Sample Output 2

100

The fee might be the same in the two plans.

Sample Input 3

6 18 100

Sample Output 3

100

Solution in C++14 (GCC 5.4.1) (judge verdict: Runtime Error)

#include "bits/stdc++.h"

using namespace std;

const int N = 1e5 + 5;
vector<pair<int, int>> thing[N], things;

signed main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin.exceptions(cin.failbit);
	int n, c;
	cin >> n >> c;
	
	for (int i = 0; i < n; ++i) {
		int s, t, channel;
		cin >> s >> t >> channel;
		--channel;
		thing[channel].emplace_back(s, 0);
		thing[channel].emplace_back(t, 1);
	}
	for (int i = 0; i < c; ++i) {
		sort(thing[i].begin(), thing[i].end());
		for (int j = 0; j < thing[i].size(); ++j)
			if (j + 1 < thing[i].size() and thing[i][j].first == thing[i][j + 1].first and thing[i][j].second != thing[i][j + 1].second)
					++j;
			else
				things.push_back(thing[i][j]);
	}
	sort(things.begin(), things.end());
	int beg = 0, mx = 0;
	for (int i = 0; i < things.size(); ++i) {
//				cerr << things[i].first << ' ' << things[i].second << endl;
		if (things[i].second == 0)
			++beg;
		if (things[i].second == 1)
			--beg;
		mx = max(mx, beg);
	}
	cout << mx << endl;
}