/*
* UVa 10465 Homer Simpson Algorithm DP...
* 感觉这题很简单, 但是状态转移方程也想了挺长的时间。
* 之前对dp的感觉就是状态转移方程很难设计, 现在决觉的dp和递推关系很密切
* 自顶向下分析, 自底向上求解。
* dp就是DP,写出来的代码就是短啊, 这也是我做dp的一个原因.我很懒的^-^
*/
#include <stdio.h>
#include <stdlib.h>
#define MAX 10001
struct arr {
int cntb;
int cnts;
} Arr[MAX];
int main(void)
{
int i, m, n, t, big, small;
int a, b, x, y;
while (scanf("%d %d %d", &m, &n, &t) == 3) {
big = m > n ? m : n;
small = m + n - big;
Arr[0].cntb = Arr[0].cnts = 0;
for (i = 1; i <= t; i++) {
if (i < small) {
Arr[i].cntb = Arr[i].cnts = 0;
} else if (i < big && i >= small) {
// we can only eat small one
Arr[i].cnts = Arr[i - small].cnts + 1;
Arr[i].cntb = Arr[i - small].cntb;
} else {
a = Arr[i - small].cnts + Arr[i - small].cntb;
x = i - small - (Arr[i - small].cnts*small + Arr[i - small].cntb*big);
b = Arr[i - big].cnts + Arr[i - big].cntb;
y = i - big - (Arr[i - big].cnts*small + Arr[i - big].cntb*big);
if (x < y || (x == y && a > b)) {
// we must choice small...
Arr[i].cnts = Arr[i - small].cnts + 1;
Arr[i].cntb = Arr[i - small].cntb;
} else {
// just choice big one...
Arr[i].cnts = Arr[i - big].cnts;
Arr[i].cntb = Arr[i - big].cntb + 1;
}
}
}
printf("%d", Arr[t].cnts + Arr[t].cntb);
if (t != Arr[t].cnts*small + Arr[t].cntb*big) {
printf(" %d", t - (Arr[t].cntb*big + Arr[t].cnts*small));
}
printf("\n");
}
return 0;
}
