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.util.*;

/**
 * Codeforces Beta Round #64 (Div. 1), C
 * @author Roman Kosenko <madkite@gmail.com>
 */
public class LuckyTickets64 {
	public static void main(String[] args) throws IOException {
		if(!Boolean.parseBoolean(System.getProperty("ONLINE_JUDGE")))
			System.setIn(new FileInputStream(new File("input.txt")));
		Scanner s = new Scanner(System.in);
		int maxx = s.nextInt(), maxy = s.nextInt(), w = s.nextInt();

		long[] a = new long[Math.max(maxx, maxy) + 1];
		Map<Long, List<Integer>> map = new HashMap<Long, List<Integer>>(2 * a.length);
		for(int i = 1; i < a.length; i++) {
			int r = 0, gcd = i;
			for(int j = i; j > 0; j /= 10)
				r = r * 10 + j % 10;
			for(int j = r; j != 0;)
				j = gcd % (gcd = j);
			List<Integer> list = map.get(a[i] = (long)i / gcd << 32 | r / gcd);
			if(list == null)
				map.put(a[i], list = new LinkedList<Integer>());
			list.add(i);
		}

		long rx = maxx + 1, ry = maxy;
		Queue<Integer> queue = new PriorityQueue<Integer>(w + 1);
		for(int x = 1; x <= maxx; x++) {
			List<Integer> list = map.get(a[x] << 32 | a[x] >>> 32);
			if(list == null)
				continue;
			for(int y : list) {
				if(y > maxy)
					break;
				queue.offer(-y);
				if(queue.size() > w)
					queue.poll();
			}
			if(queue.size() == w) {
				long h = -queue.peek();
				if(x * h < rx * ry) {
					rx = x;
					ry = h;
				}
			}
		}
		System.out.println(rx <= maxx ? rx + " " + ry : "-1");
	}
}