#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 d = gcd(gcd(a, b), t); a /= d; b /= d; t /= d; 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(); if (i >= t) { ans = i; break; } if ((t - i) % a == 0) { ans = t; break; } if ((t - i) % b == 0) { ans = t; break; } used.erase(i); 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 * d << endl; return 0; }