n = int(input())
m = int(input())
k = int(input())
n, m = (reversed(sorted([n, m])))
i = 1
j = max([j for j in range(1, m + 1) if i * j + k <= n * m + 1])
ans = i * j
flag = True
while i + j:
if flag:
i += 1
flag = False
else:
j -= 1
if i > n or j <= 0:
break
if i * j + k <= n * m + 1:
flag = True
if ans + k < i * j + k:
ans = i * j
print(ans)
Формат входных данных
Программа получает на вход три натуральных числа, каждое в отдельной строке: m, n и k. Все числа целые положительные, при этом mm и nn не превосходят 10^6, а k≤mn. Обратите внимание на то, что значение mnmn, а значит, и значение k в этой задаче может превышать возможное значение 32‑битной целочисленной переменной, поэтому необходимо использовать 64‑битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).
Формат выходных данных
Программа должна вывести одно целое число максимально возможное количество долек в том прямоугольном куске, который получит Юра.
Система оценки
Решения, правильно работающие при m≤1000 и n≤1000, будут оцениваться в 60 баллов.
Замечание
В примере из условия нужно разделить шоколадку 4×5 на 4 кусочка. Самый большой кусочек будет состоять из 16 долек, как показано на картинке.
Ввод
4
5
4
Вывод
16