import sys
def main():
n, m, k = map(int, sys.stdin.read().split()[:3])
total = k - 1 + n
rows = (total + m - 1) // m
grid = [[False] * m for _ in range(rows)]
for d in range(n):
p = k - 1 + d
grid[p // m][p % m] = True
best = 0
heights = [0] * m
for r in range(rows):
for c in range(m):
heights[c] = heights[c] + 1 if grid[r][c] else 0
stack = []
for c in range(m + 1):
h = heights[c] if c < m else 0
start = c
while stack and stack[-1][1] >= h:
start, sh = stack.pop()
best = max(best, sh * (c - start))
stack.append((start, h))
print(best)
main()