#include <bits/stdc++.h>
using namespace std;
int sett(int N, int pos) { return N = N | (1 << pos); }
int reset(int N, int pos) { return N = N & ~(1 << pos); }
bool check(int N, int pos) { return (bool)(N & (1 << pos)); }
void update(int &x, int val) {
  x = x + val;
  if (x > 1000000007) x -= 1000000007;
}
int IsPrime(long long number) {
  if (number <= 1) return 0;
  if ((number > 2) && ((number % 2) == 0)) return 0;
  long long i;
  for (i = 2; i * i <= number; i++) {
    if (number % i == 0) return 0;
  }
  return 1;
}
int main() {
  long long n, m, k;
  cin >> n >> m >> k;
  long long hi = m * n + 1;
  long long lo = 1;
  long long mid = 0;
  while (lo < hi) {
    mid = (hi + lo) / 2;
    long long tot = 0;
    for (long long i = 1; i <= n; i++) {
      tot = tot + min(m, ((mid - 1) / i));
    }
    if (tot < k) {
      lo = mid + 1;
    } else {
      hi = mid;
    }
  }
  cout << lo - 1;
  return 0;
}
