#include #include #include using namespace std; // w,h,m int tab[21][21][21]; int opt(int, int, int); void setup() { for(int w = 0; w <= 20; w++) for(int h = 0; h <= 20; h++) for(int m = 1; m <= 20; m++) tab[w][h][m] = opt(w,h,m); } int opt(int w, int h, int m) { if(w==0 || h==0) return 0; if(m==1) return w*h; int best = 100000; // w first for(int i = 1; i < w; i++) for(int j = 1; j < m; j++) { int x = max(tab[i][h][j],tab[w-i][h][m-j]); if(x < best) best = x; } for(int i = 1; i < h; i++) for(int j = 1; j < m; j++) { int x = max(tab[w][i][j],tab[w][h-i][m-j]); if(x < best) best = x; } return best; } void run() { int w,h,m; cin >> w >> h >> m; if(w == 0 && h == 0 && m == 0) exit(0); cout << tab[w][h][m] << endl; } int main() { setup(); while(1) run(); }