Problem: ICPC World Finals Day 2

Mr. Tee and his colleagues arrived at the airport terminal. From now on, I will transfer the plane and board the enemy land R country. Since we go through Country D, we have to exchange our money into two currencies.

Mr. Kay "How does Mr. Tee exchange money?"

Mr. Tee "Huff Huff Huff Huff Huff Huff Huff Huff"

Mr. Kay "I see. I will allocate 20,000 yen for country D and 5,000 yen for country R."

Mr. Tee "Huff Huff Huff Huff Huff Huff Huff Huff"

Mr. Kay "That's strange. The exchange result is different from mine ..."

problem

One traveler is thinking of leaving Japan, sightseeing in country D (currency unit D) and country R (currency unit R), and returning to Japan. I have a \\ (M \\) yen now. I know that \\ (c_ {D} \\) [D] and \\ (c_ {R} \\) [R] will be consumed in each country, so I want to exchange money so that I don't run out of money. \\ (x \\) If you exchange yen for D country money, \\ (\ lfloa \ frac {r_ {D} x} {100} \ rfloor \\) [D], \\ (x \\) If you exchange yen for R country money, it becomes \\ (\ lfloa \ frac {r_ {R} x} {100} \ rfloor \\) [R].

For example, if you exchange 150 yen for D country money at \\ (r_ {D} = 11, c_ {D} = 10 \\), \\ (\ lfloor \ frac {11 \ times 150} {100} \ rfloor = \\) 16 [D] so there is no shortage of money. However, if you exchange only 50 yen, it will be 5 [D] and less than 10 [D], so you will run out of money.

Also, when returning to Japan, all the money on hand will be exchanged for Japanese yen. If you exchange \\ (x \\) [D] for Japanese Yen, you will get \\ (\ lfloor \ frac {100x} {r_ {D}} \ rfloor \\) Yen, \\ (x \\) [R] Is converted into Japanese Yen, which becomes \\ (\ lfloor \ frac {100x} {r_ {R}} \ rfloor \\) Yen.

In the first example above, 10 [D] of the obtained 16 [D] are consumed, so 6 [D] is left over. If you exchange this for Japanese Yen, it will be \\ (\ lfloor \ frac {100 \ times 6} {11} \ rfloor = 54 \\) Yen.

Find the maximum amount of Japanese Yen that will eventually be returned to you when you return to Japan when you have optimally exchanged Japanese Yen at the time of departure. No matter what kind of exchange you make, if you run out of money in either Country D or Country R, ​​output "-1".

* \\ (\ lfloor x \ rfloor \\) represents the largest integer that does not exceed \\ (x \\).

input


M rD rR cD cR


The first line is the amount of Japanese Yen you currently have \\ (M \\), the exchange rate between Japanese Yen and the currency unit of Country D \\ (r_ {D} \\), the currency unit of Japanese Yen and Country R Exchange rate with \\ (r_ {R} \\), money consumption in country D \\ (c_ {D} \\), money consumption in country R \\ (c_ {R} \ \) Is given separated by spaces.

output

Output the maximum amount of Japanese Yen that will be returned to you on one line. No matter what kind of exchange you make, if you run out of money in either Country D or Country R, ​​output "-1".

Constraint

* \\ (0 \ leq M \ leq 10 ^ {12} (= 1000000000000) \\)
* \\ (1 \ leq r_ {D}, r_ {R} \ leq 100 \\)
* \\ (0 \ leq c_ {D}, c_ {R} \ leq 10 ^ {12} (= 1000000000000) \\)


Input / output example

Input 1


20000 3 1 20 100


Output 1


9333


If you convert 667 yen to country D money and 10,000 yen to country R money, you will get 20 [D] and 100 [R], respectively.

Input 2


1000000000000 3 1 20 100


Output 2


999999989333


This traveler is very rich.

Input 3


0 3 1 20 100


Output 3


-1


This traveler is sentenceless and can't go anywhere.





Example

Input

M r


Output

9333

Solution (in CPP):

Solution:
////////////////////////////////////////
///  tu3 pro-con template            ///
////////////////////////////////////////
#include <cassert>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <algorithm>
#include <numeric>
#include <functional>
#include <vector>
#include <queue>
#include <string>
#include <complex>
#include <stack>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <bitset>
#include <regex>
#include <valarray>
using namespace std;

//// MACRO ////
#define countof(a) (sizeof(a)/sizeof(a[0]))

#define REP(i,n) for (int i = 0; i < (n); i++)
#define RREP(i,n) for (int i = (n)-1; i >= 0; i--)
#define FOR(i,s,n) for (int i = (s); i < (n); i++)
#define RFOR(i,s,n) for (int i = (n)-1; i >= (s); i--)
#define pos(c,i) c.being() + (i)
#define allof(c) c.begin(), c.end()
#define aallof(a) a, countof(a)
#define partof(c,i,n) c.begin() + (i), c.begin() + (i) + (n)
#define apartof(a,i,n) a + (i), a + (i) + (n)
//#define long long long

#define EPS 1e-9
#define INF (1L << 24)
#define LINF (1LL << 60)

#define PREDICATE(t,a,...) [&](const t & a) -> bool { return __VA_ARGS__; }
#define COMPARISON_T(t) bool(*)(const t &, const t &)
#define COMPARISON(t,a,b,...) [&](const t & a, const t & b) -> bool { return __VA_ARGS__; }
#define CONVERTER(TSrc,t,TDest,...) [&](const TSrc &t)->TDest { return __VA_ARGS__; }
#define TIE(t,...) t __VA_ARGS__; tie(__VA_ARGS__)

inline int sign(double x) { return (abs(x) < EPS ? 0 : x > 0 ? 1 : -1); }
inline bool inRange(int val, int min, int max) { return val >= min && val < max; }
inline bool inRange(double val, double min, double max) { return val - min > -EPS && val - max < EPS; }
inline bool inRange(int x, int y, int W, int H) { return x >= 0 && x < W && y >= 0 && y < H; } // W,H????????????
template <class T> struct vevector : public vector<vector<T>> { vevector(int n = 0, int m = 0, const T &initial = T()) : vector<vector<T>>(n, vector<T>(m, initial)) { } };
template <class T> struct vevevector : public vector<vevector<T>> { vevevector(int n = 0, int m = 0, int l = 0, const T &initial = T()) : vector<vevector<T>>(n, vevector<T>(m, l, initial)) { } };
template <class T> struct vevevevector : public vector<vevevector<T>> { vevevevector(int n = 0, int m = 0, int l = 0, int k = 0, const T &initial = T()) : vector<vevevector<T>>(n, vevevector<T>(m, l, k, initial)) { } };

//// i/o helper ////

#ifdef _DEBUG
#define DEBUG WRITE
inline void readfrom(string filename) { freopen(filename.c_str(), "r", stdin); }
inline void writeto(string filename) { freopen(filename.c_str(), "w", stdout); }
#else
#define DEBUG(...)
inline void readfrom(...) { }
inline void writeto(...) { }
#endif
#ifdef colored_cout
#  define cout colored_cout
#  define endl colored_endl
#endif


template <class T> T read() { T t; cin >> t; return t; }
template <class T> vector<T> read(int n) { vector<T> v; REP(i, n) { v.push_back(read<T>()); } return v; }
template <class T> vevector<T> read(int n, int m) { vevector<T> v; REP(i, n) v.push_back(read<T>(m)); return v; }
template <class T> vector<T> readjag() { return read<T>(read<int>()); }
template <class T> vevector<T> readjag(int n) { vevector<T> v; REP(i, n) v.push_back(readjag<T>()); return v; }

template <class T1, class T2> inline istream & operator >> (istream & in, pair<T1, T2> &p) { in >> p.first >> p.second; return in; }
template <class T1, class T2> inline ostream & operator << (ostream &out, const pair<T1, T2> &p) { out << p.first << " " << p.second; return out; }
template <class T> inline ostream & operator << (ostream &out, const vector<T> &v)
{
	ostringstream ss;
	for (auto x : v) ss << x << " ";
	auto s = ss.str();
	out << s.substr(0, s.length() - 1);
	return out;
}

struct _Reader { template <class T> _Reader operator ,(T &rhs) { cin >> rhs; return *this; } };
struct _Writer { bool f; _Writer() : f(false) { } template <class T> _Writer operator ,(const T &rhs) { cout << (f ? " " : "") << rhs; f = true; return *this; } };
#define READ(t,...) t __VA_ARGS__; _Reader(), __VA_ARGS__
#define WRITE(...) _Writer(), __VA_ARGS__; cout << endl

//// start up ////
void solve();

int main()
{
	solve();
	return 0;
}

////////////////////
/// template end ///
////////////////////

void solve()
{
	READ(long long, M, rd, rr, cd, cr);

	long long needs = ceil((long double) cd * 100.0 / rd) + ceil((long double) cr * 100.0 / rr);
	if (M < needs)
	{
		WRITE(-1);
	}
	else
	{
		WRITE(M - needs);
	}
}