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 CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
int a[100008];
int p[7];
multimap<double, int>::iterator it[100008];
void get(int m) {
  int q = 0;
  int k = m;
  while (m) {
    int cc = m % 10;
    m /= 10;
    if (cc == 0 && q == 0)
      continue;
    else
      p[++q] = cc;
  }
  for (int i = 1; i <= q; i++) {
    a[k] = a[k] * 10 + p[i];
  }
}
int main() {
  int aa, bb, w, flag = 0;
  scanf("%d%d%d", &aa, &bb, &w);
  if (aa > bb) {
    flag = 1;
    swap(aa, bb);
  }
  fill(a, a + bb + 2, 0);
  for (int i = 1; i <= bb; i++) get(i);
  multimap<double, int> mm;
  multimap<double, int> mm2;
  for (int i = 1; i <= bb; i++) {
    it[i] = mm.insert(make_pair((double)(i) / a[i], i));
  }
  int sum = 0;
  int x, y;
  int x1, y1;
  long long ans = (long long)aa * bb + 1;
  for (int i = 1; i <= aa; i++) {
    double k = (double)(a[i]) / i;
    int cnt = mm.count(k);
    sum += cnt;
    mm2.insert(make_pair(k, i));
    if (sum >= w) {
      x = i;
      y = bb;
      ans = x * y;
      x1 = x;
      y1 = y;
      while (1) {
        if (sum >= w) {
          if (y > 1) {
            double kk = (double)(y) / a[y];
            int cnt = mm2.count(kk);
            sum -= cnt;
            mm.erase(it[y]);
            y--;
            if (sum >= w) {
              if (x * y < ans) {
                x1 = x;
                y1 = y;
                ans = x1 * y1;
              }
            }
          } else
            break;
        } else {
          if (x < aa) {
            x++;
            double kk = double(a[x]) / (x);
            int cnt = mm.count(kk);
            sum += cnt;
            mm2.insert(make_pair(kk, x));
            if (sum >= w) {
              if (x * y < ans) {
                x1 = x;
                y1 = y;
                ans = x * y;
              }
            }
          } else
            break;
        }
      }
      break;
    }
  }
  if (ans == ((long long)aa * bb + 1))
    cout << "-1" << endl;
  else if (flag) {
    cout << y1 << " " << x1 << endl;
  } else
    cout << x1 << " " << y1 << endl;
  return 0;
}