#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
static inline void amin(T &x, U y) {
  if (x > y) x = y;
}
template <typename T, typename U>
static inline void amax(T &x, U y) {
  if (x < y) x = y;
}
int inf = 2e9 + 15;
long long INF = 2e18L + 15;
const int mod = 1e9 + 7;
int main() {
  long long n, m, k;
  cin >> n >> m >> k;
  long long lo = 1, hi = n * m;
  k = hi - k + 1;
  long long ans, mid, j;
  while (lo <= hi) {
    mid = (lo + hi) >> 1;
    long long gte = 0;
    long long gt = 0;
    bool exist = 0;
    for (int i = 1; i <= n; ++i) {
      j = mid / i;
      if (mid % i == 0 && j <= m) {
        exist = 1;
        gte++;
      }
      if (m > j) {
        gte += m - j;
        gt += m - j;
      }
    }
    if (exist) {
      if (gt <= k - 1 && gte >= k) {
        ans = mid;
        lo = hi + 1;
      } else if (gt >= k) {
        lo = mid + 1;
      } else {
        hi = mid - 1;
      }
    } else {
      if (gt <= k - 1) {
        hi = mid - 1;
      } else {
        lo = mid + 1;
      }
    }
  }
  cout << ans << "\n";
  return 0;
}
