#include <bits/stdc++.h>
#define all(x) begin(x), end(x)
#define rall(x) rbegin(x), rend(x)
#define between(l, x, r) l <= x && x <= r
using namespace std;
using ll = long long;
void solve() {
ll n, m, k;
cin >> n >> m >> k;
if (n > m) swap(n,m);
if ((n-1)+(m-1) < k) {
cout << -1 << endl;
return;
}
if (n-1 >= k) {
cout << max(m*(n/(k+1)), n*(m/(k+1))) << endl;
}
else if (n-1 < k && k <= m-1) {
cout << n*(m / (k+1)) << endl;
}
else {
cout << (n/(k+1-(m-1))) << endl;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int t = 1;
// cin >> t;
while (t--) solve();
#ifdef LOCAL_TIME
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << "s\n";
#endif
}
1671D - Insert a Progression | 1671A - String Building |
1671B - Consecutive Points Segment | 1671C - Dolce Vita |
1669G - Fall Down | 4D - Mysterious Present |
1316B - String Modification | 1204A - BowWow and the Timetable |
508B - Anton and currency you all know | 1672A - Log Chopping |
300A - Array | 48D - Permutations |
677C - Vanya and Label | 1583B - Omkar and Heavenly Tree |
1703C - Cypher | 1511C - Yet Another Card Deck |
1698A - XOR Mixup | 1702E - Split Into Two Sets |
1703B - ICPC Balloons | 1702F - Equate Multisets |
1700A - Optimal Path | 665C - Simple Strings |
1708A - Difference Operations | 1703E - Mirror Grid |
1042A - Benches | 1676B - Equal Candies |
1705B - Mark the Dust Sweeper | 1711A - Perfect Permutation |
1701B - Permutation | 1692A - Marathon |