import std.algorithm, std.conv, std.range, std.stdio, std.string; import std.container; // SList, DList, BinaryHeap import std.typecons; // Tuple, Nullable, BigFlags import std.math; // math functions import std.numeric; // gcd import std.bigint; // BigInt import std.random; // random import std.bitmanip; // BitArray import core.bitop; // bit operation import std.regex; // RegEx import std.uni; // unicode void main() { auto rd = readln.split.to!(long[]), a = rd[0], b = rd[1], t = rd[2]; long x, y; auto g = exEuclid(a, b, x, y); a /= g; b /= g; t = (t + g - 1) / g; auto calc() { auto miAB = min(a, b); auto miT = (t + miAB - 1) / miAB * miAB; if (x < 0) { foreach (k; max(t, miAB)..miT) { if (((k * -x) + b - 1) / b <= (k * y) / a) return k; } } else { foreach (k; max(t, miAB)..miT) if (((k * -y) + a - 1) / a <= (k * x) / b) return k; } return miT; } writeln(calc * g); } T exEuclid(T)(T a, T b, ref T x, ref T y) { auto g = a; x = 1; y = 0; if (b != 0) { g = exEuclid(b, a % b, y, x); y -= a / b * x; } return g; }