Problem: In Walrusland public transport tickets are characterized by two integers: by the number of the series and by the number of the ticket in the series. Let the series number be represented by a and the ticket number — by b, then a ticket is described by the ordered pair of numbers (a, b). 

The walruses believe that a ticket is lucky if a * b = rev(a) * rev(b). The function rev(x) reverses a number written in the decimal system, at that the leading zeroes disappear. For example, rev(12343) = 34321, rev(1200) = 21.

The Public Transport Management Committee wants to release x series, each containing y tickets, so that at least w lucky tickets were released and the total number of released tickets (x * y) were minimum. The series are numbered from 1 to x inclusive. The tickets in each series are numbered from 1 to y inclusive. The Transport Committee cannot release more than maxx series and more than maxy tickets in one series.

Input

The first line contains three integers maxx, maxy, w (1 ≤ maxx, maxy ≤ 105, 1 ≤ w ≤ 107).

Output

Print on a single line two space-separated numbers, the x and the y. If there are several possible variants, print any of them. If such x and y do not exist, print a single number  - 1.

Examples

Input

2 2 1


Output

1 1

Input

132 10 35


Output

7 5

Input

5 18 1000


Output

-1


Input

48 132 235


Output

22 111

Solution (in JAVA):

Solution:
import java.io.*;
import java.math.*;
import java.util.*;
import static java.lang.Math.*;
public class C {
    public static class Fraction {
        public static int gcd(int a, int b){
            return b==0?a:gcd(b, a%b);
        }

        int a; // numerator
        int b; // denominator
        public Fraction(int a, int b) {
            if(b<0) {
                a = -a;
                b = -b;
            }
            int gcd = gcd(a, b);
            this.a = a/gcd;
            this.b = b/gcd;
        }

        public boolean equals(Object o) {
            if(!(o instanceof Fraction)) return false;
            Fraction r = (Fraction)o;
            return a==r.a&&b==r.b;
        }

        public int hashCode() {
            return a*31^b;
        }

        @Override public String toString() {
            return String.format("Fraction: %d / %d", a, b);
        }
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line;
    StringTokenizer st;
    StringBuilder buf = new StringBuilder();
    int rev(int i) {
        int r = 0;
        while(i!=0) {
            r = r*10+i%10;
            i /= 10;
        }
        return r;
    }
    void add(Map<Fraction, Integer> map, Fraction key, int addend) {
        Integer v = map.get(key);
        if(v==null)
            map.put(key, addend);
        else
            map.put(key, v+addend);
    }
    int get(Map<Fraction, Integer> map, Fraction key) {
        Integer v = map.get(key);
        if(v==null)
            return 0;
        return v;
    }
    public C() throws Exception {
        line = br.readLine();
        st = new StringTokenizer(line);
        int maxX = Integer.parseInt(st.nextToken());
        int maxY = Integer.parseInt(st.nextToken());
        int w = Integer.parseInt(st.nextToken());

        Fraction[] fx = new Fraction[maxX+1];
        for (int x=1;x<=maxX;x++) {
            fx[x] = new Fraction(x, rev(x));
        }
        Fraction[] fy = new Fraction[maxY+1];
        for (int y=1;y<=maxY;y++) {
            fy[y] = new Fraction(rev(y), y);
        }
        Map<Fraction,Integer> xCount = new HashMap<Fraction,Integer>();
        for (int x=1;x<=maxX;x++) {
            add(xCount, fx[x], 1);
        }
        Map<Fraction,Integer> yCount = new HashMap<Fraction,Integer>();

        long min = Long.MAX_VALUE;
        int rx = -1;
        int ry = -1;
        int y = 0;
        int curW = 0;
        for (int x=maxX;x>=1;x--) {
            while(y<maxY&&curW<w) {
                y++;
                add(yCount, fy[y], 1);
                curW += get(xCount, fy[y]);
            }
            if(curW<w) break;
            if(min>(long)x*y) {
                min = (long)x*y;
                rx = x;
                ry = y;
            }
            add(xCount, fx[x], -1);
            curW -= get(yCount, fx[x]);
        }

        if(rx==-1) 
            buf.append(-1).append('\n');
        else
            buf.append(rx).append(' ').append(ry).append('\n');

        System.out.print(buf);
    }

    public static void main(String[] args) throws Exception { // {{{
        new C();
    } // }}}
    public static void debug(Object... arr) { // {{{
        System.err.println(Arrays.deepToString(arr));
    } // }}}
}