#include #include #include #include #define repeat(i,n) for (int i = 0; (i) < (n); ++(i)) using namespace std; template void setmin(T & a, T const & b) { if (b < a) a = b; } template using reversed_priority_queue = priority_queue, greater >; template T gcd(T a, T b) { while (a) { b %= a; swap(a, b); } return b; } const int inf = 1e9+7; int main() { int a, b, t; cin >> a >> b >> t; int ans = inf; if (b < 100) { set used; reversed_priority_queue que; que.push(0); while (not que.empty()) { int i = que.top(); que.pop(); used.erase(i); if (i >= t) { setmin(ans, i); break; } if (i >= 10000000) break; setmin(ans, i + (t - i + a-1)/a*a); setmin(ans, i + (t - i + b-1)/b*b); if (ans == t) break; if (not used.count(i + a)) { used.insert(i + a); que.push(i + a); } if (not used.count(i + b)) { used.insert(i + b); que.push(i + b); } } } else { for (int i = 0; i <= t; i += b) { setmin(ans, i + (t - i + a-1)/a*a); } } cout << ans << endl; return 0; }