/*
    给出mx,my,w(1<= mx,my<=10^5, 1<= w <= 10^7)
    求minimal{x*y},1<=x<=mx,1<=y<=my
    使得[1x][1y]这个区域内满足 a*b = rev(a)*rev(b)的点的个数>=w
    
    我能想到的是
    先预处理出所有rev(a),从左到右扫描x,加进新的点(即所有满足x*b = rev(x)*rev(b),1<=b<=my)
    然后二分y,找出满足w的最小的y
    
    也想到将a*b = rev(a)*rev(b)变形为 a/rev(a) = rev(b)/b,但想不下去了,
    不知怎么快速获取所有满足x*b = rev(x)*rev(b)(主要是因为a/rev(a)是浮点数,不知怎么用下标存)
    
    看了别人的,用map<double,int>就可以了   →.→
    看了watashi的,是存分子分母(先用gcd约分一下)              ------------------------------OMG

    总体算法就是
    从左到右扫描x,加入所有满足x*b = rev(x)*rev(b)的点
    而满足这个条件的就是满足x/rev(x) = rev(b)/b的,由于之前已经存了mpy[(b,rev(b))]
    满足上面式子点的个数就是mpy[(rev(x),x)]了
    比较神奇的是,他在枚举x时,要获取满足>=w的y,不是二分y的,是通过微调的    -----------OMG
    即若当前的x*y范围内的点>=w,
    y--;
    iw -= mpx[(rev(y),y)];
    mpy[(y,rev(y))]--;
    若<w,再补上去


    第一次看到这样微调的,神奇丫~~~~~~~~~
    y从my出发
    一直保持iw>=w,微调至最接近w但>=w
    整个过程,y肯定是递减的~~~
*/

#include
<iostream>
#include
<cstring>
#include
<map>
#include
<algorithm>
#include
<stack>
#include
<queue>
#include
<cmath>
#include
<string>
#include
<cstdlib>
#include
<vector>
#include
<cstdio>
#include
<set>
#include
<list>
#include
<numeric>
#include
<cassert>
#include
<ctime>
#include
<bitset>

using namespace std;

const long long INF = 12345678987654321LL;
const int MAXN = 100100;

pair
<int,int> r[MAXN];//(i, rev(i))

inline 
int gcd(int a, int b) {
    
return b == 0 ? a : gcd(b, a % b);
}


inline 
int rev(int x) {
    
int r = 0;
    
while(x > 0{
        r 
= r*10 + x % 10;
        x 
/= 10;
    }

    
return r;
}


pair
<int,int> inv(pair<int,int> &p) {
    
return make_pair(p.second, p.first);
}


void init() {
    
for (int i = 1 ; i <= 100000; i++{
        
int t = rev(i);
        
int g = gcd(i,t);
        r[i] 
= make_pair(i/g, t/g);
    }

}


int main()
{
#ifndef ONLINE_JUDGE
    freopen(
"in","r",stdin);
#endif

    init();
    
for (int mx,my,w; ~scanf("%d%d%d"&mx, &my, &w);) {

        map
<pair<int,int>int> mpx, mpy;    
        
for (int y = 1; y <= my; y++{
            mpy[r[y]]
++;
        }


        
long long X = -1, Y = -1;
        
long long iw = 0;
        
for (long long x = 1, y = my; x <= mx; x++{//y是从my出发的
            iw += mpy[inv(r[x])];
            mpx[r[x]]
++;
            
while(iw >= w) {                
                iw 
-= mpx[inv(r[y])];
                mpy[r[y]]
--;
                y
--;
                
if(iw < w) {
                    y
++;
                    mpy[r[y]]
++;
                    iw 
+= mpx[inv(r[y])];
                    
break;
                }

            }

            
//一直保持着iw>=w,然后引进新的x时,尝试y--
            
//整个过程,y肯定是递减的~~~
            if(iw>=&& (X == -1 || x*< X*Y) ) {
                X 
= x;
                Y 
= y;
            }

        }

        
if (X == -1{
            puts(
"-1");
        }
 else {
            printf(
"%I64d %I64d\n", X, Y);
        }

    }
    
    
return 0;
}