#include <bits/stdc++.h>
using namespace std;
void __print(long long x) { cerr << x; }
void __print(long x) { cerr << x; }
void __print(unsigned x) { cerr << x; }
void __print(unsigned long x) { cerr << x; }
void __print(unsigned long long x) { cerr << x; }
void __print(float x) { cerr << x; }
void __print(double x) { cerr << x; }
void __print(long double x) { cerr << x; }
void __print(char x) { cerr << '\'' << x << '\''; }
void __print(const char *x) { cerr << '\"' << x << '\"'; }
void __print(const string &x) { cerr << '\"' << x << '\"'; }
void __print(bool x) { cerr << (x ? "true" : "false"); }
template <typename T, typename V>
void __print(const pair<T, V> &x) {
  cerr << '{';
  __print(x.first);
  cerr << ',';
  __print(x.second);
  cerr << '}';
}
template <typename T>
void __print(const T &x) {
  long long f = 0;
  cerr << '{';
  for (auto &i : x) cerr << (f++ ? "," : ""), __print(i);
  cerr << "}";
}
void _print() { cerr << "]\n"; }
template <typename T, typename... V>
void print(T t, V... v) {
  _print(t);
  if (sizeof...(v)) cerr << ", ";
  _print(v...);
}
long long Power(long long a, long long n, long long mod) {
  long long res = 1;
  while (n) {
    if (n % 2 != 0) {
      res = ((res % mod) * (a % mod)) % mod;
      n--;
    } else {
      a = ((a % mod) * (a % mod)) % mod;
      n /= 2;
    }
  }
  return res;
}
bool isPrime(long long n) {
  if (n <= 1) return false;
  if (n <= 3) return true;
  if (n % 2 == 0 || n % 3 == 0) return false;
  for (long long i = 5; i * i <= n; i = i + 6)
    if (n % i == 0 || n % (i + 2) == 0) return false;
  return true;
}
long long getSum(long long n) {
  long long sum = 0;
  while (n != 0) {
    sum = sum + n % 10;
    n = n / 10;
  }
  return sum;
}
long long myceil(long long n, long long x) {
  long long y;
  if (n % x == 0) {
    y = n / x;
    return y;
  } else {
    y = n / x + 1;
    return y;
  }
}
long long md = 1000000007;
vector<long long> fact, inv;
void inverse(long long n) {
  if (n >= (long long)inv.size()) {
    long long size = (long long)inv.size();
    size = size == 0 ? 1 : size;
    inv.resize(n + 1);
    inv[0] = 1;
    for (long long i = size; i <= n; i++) inv[i] = Power(fact[i], md - 2, md);
  }
}
void factorial(long long n) {
  if (n >= (long long)fact.size()) {
    long long size = (long long)fact.size();
    size = size == 0 ? 1 : size;
    fact.resize(n + 1);
    fact[0] = 1;
    for (long long i = size; i <= n; i++) fact[i] = (fact[i - 1] * i) % md;
  }
}
long long ncr(long long n, long long r) {
  return (((fact[n] * inv[r]) % md) * inv[n - r]) % md;
}
void UltraSieve(long long n, long long s[]) {
  bool prime[n + 1];
  memset(prime, true, sizeof(prime));
  for (long long i = 2; i <= n; i += 2) s[i] = 2;
  for (long long p = 2; p * p <= n; p++) {
    if (prime[p] == true) {
      for (long long i = p * p; i <= n; i += p) {
        prime[i] = false;
        s[i] = i;
      }
    }
  }
  for (long long p = 2; p <= n; p++)
    if (prime[p]) s[p] = p;
}
void sieveOfEratosthenes(long long N, long long s[]) {
  vector<bool> prime(N + 1, false);
  for (long long i = 2; i <= N; i += 2) s[i] = 2;
  for (long long i = 3; i <= N; i += 2) {
    if (prime[i] == false) {
      s[i] = i;
      for (long long j = i; j * i <= N; j += 2) {
        if (prime[i * j] == false) {
          prime[i * j] = true;
          s[i * j] = i;
        }
      }
    }
  }
}
unordered_map<long long, long long> generatePrimeFactors(long long N) {
  long long s[N + 1];
  unordered_map<long long, long long> mp;
  sieveOfEratosthenes(N, s);
  long long curr = s[N];
  long long cnt = 1;
  while (N > 1) {
    N /= s[N];
    if (curr == s[N]) {
      cnt++;
      continue;
    }
    mp[curr] = cnt;
    curr = s[N];
    cnt = 1;
  }
  return mp;
}
void q();
void q1();
void q2();
void q3();
void q4();
void q5();
void q6();
void q7();
void q8();
void q9();
void q10();
void q11();
void q12();
void s();
void perm();
void q() {
  long long n, m, r, c;
  cin >> n >> m >> r >> c;
  long long ans = 0;
  ans = max({r + c - 2, n - r + m - c, r - 1 + m - c, c - 1 + n - r});
  cout << ans << "\n";
}
void q2() {
  long long n, k;
  cin >> n >> k;
  vector<long long> v(n, 0);
  unordered_map<long long, pair<long long, long long>> mp;
  for (long long i = 0; i < n; i++) {
    cin >> v[i];
    mp[v[i]].first++;
  }
  long long j = 0;
  for (long long i = 0; i < (long long)v.size(); i++) {
    j = i;
    while (j < (long long)v.size() && v[j] == v[i]) {
      j++;
    }
    mp[v[i]].second += pow(2, j - i);
    i = --j;
  }
  vector<long long> indices;
  long long mx_c = INT_MIN, mx, mn = INT_MAX;
  for (auto m : mp) {
    if (m.second.first >= mx_c) {
      if (m.second.first == mx_c) {
        if (m.second.second < mn) {
          mn = m.second.second;
          mx = m.first;
        }
      } else {
        mx_c = m.second.first;
        mx = m.first;
      }
    }
  }
  for (long long i = 0; i < n; i++) {
    if (v[i] != mx) indices.push_back(i);
  }
  long long ans = 0;
  for (long long i = 0; i < (long long)indices.size(); i++) {
    j = i;
    while (j < (long long)indices.size() && indices[j] - indices[i] + 1 <= k) {
      j++;
    }
    i = --j;
    ans++;
  }
  cout << ans << "\n";
}
void q3() {
  long long a, b, n;
  cin >> a >> b >> n;
  long long k = a;
  for (long long i = 0; i < 10; i++) {
    if ((a * 10 + i) % b == 0) {
      a = a * 10 + i;
      break;
    }
  }
  if (a == k)
    cout << -1;
  else
    cout << (to_string(a).append(string(n - 1, '0')));
}
int32_t main() {
  q3();
  return 0;
}

### Prompt

Please provide a Cpp coded solution to the problem described below:

Vasya has got two number: a and b. However, Vasya finds number a too short. So he decided to repeat the operation of lengthening number a n times.

One operation of lengthening a number means adding exactly one digit to the number (in the decimal notation) to the right provided that the resulting number is divisible by Vasya's number b. If it is impossible to obtain the number which is divisible by b, then the lengthening operation cannot be performed.

Your task is to help Vasya and print the number he can get after applying the lengthening operation to number a n times.

Input

The first line contains three integers: a, b, n (1 ≤ a, b, n ≤ 105).

Output

In a single line print the integer without leading zeros, which Vasya can get when he applies the lengthening operations to number a n times. If no such number exists, then print number -1. If there are multiple possible answers, print any of them.

Examples

Input

5 4 5


Output

524848


Input

12 11 1


Output

121


Input

260 150 10


Output

-1

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
void __print(long long x) { cerr << x; }
void __print(long x) { cerr << x; }
void __print(unsigned x) { cerr << x; }
void __print(unsigned long x) { cerr << x; }
void __print(unsigned long long x) { cerr << x; }
void __print(float x) { cerr << x; }
void __print(double x) { cerr << x; }
void __print(long double x) { cerr << x; }
void __print(char x) { cerr << '\'' << x << '\''; }
void __print(const char *x) { cerr << '\"' << x << '\"'; }
void __print(const string &x) { cerr << '\"' << x << '\"'; }
void __print(bool x) { cerr << (x ? "true" : "false"); }
template <typename T, typename V>
void __print(const pair<T, V> &x) {
  cerr << '{';
  __print(x.first);
  cerr << ',';
  __print(x.second);
  cerr << '}';
}
template <typename T>
void __print(const T &x) {
  long long f = 0;
  cerr << '{';
  for (auto &i : x) cerr << (f++ ? "," : ""), __print(i);
  cerr << "}";
}
void _print() { cerr << "]\n"; }
template <typename T, typename... V>
void print(T t, V... v) {
  _print(t);
  if (sizeof...(v)) cerr << ", ";
  _print(v...);
}
long long Power(long long a, long long n, long long mod) {
  long long res = 1;
  while (n) {
    if (n % 2 != 0) {
      res = ((res % mod) * (a % mod)) % mod;
      n--;
    } else {
      a = ((a % mod) * (a % mod)) % mod;
      n /= 2;
    }
  }
  return res;
}
bool isPrime(long long n) {
  if (n <= 1) return false;
  if (n <= 3) return true;
  if (n % 2 == 0 || n % 3 == 0) return false;
  for (long long i = 5; i * i <= n; i = i + 6)
    if (n % i == 0 || n % (i + 2) == 0) return false;
  return true;
}
long long getSum(long long n) {
  long long sum = 0;
  while (n != 0) {
    sum = sum + n % 10;
    n = n / 10;
  }
  return sum;
}
long long myceil(long long n, long long x) {
  long long y;
  if (n % x == 0) {
    y = n / x;
    return y;
  } else {
    y = n / x + 1;
    return y;
  }
}
long long md = 1000000007;
vector<long long> fact, inv;
void inverse(long long n) {
  if (n >= (long long)inv.size()) {
    long long size = (long long)inv.size();
    size = size == 0 ? 1 : size;
    inv.resize(n + 1);
    inv[0] = 1;
    for (long long i = size; i <= n; i++) inv[i] = Power(fact[i], md - 2, md);
  }
}
void factorial(long long n) {
  if (n >= (long long)fact.size()) {
    long long size = (long long)fact.size();
    size = size == 0 ? 1 : size;
    fact.resize(n + 1);
    fact[0] = 1;
    for (long long i = size; i <= n; i++) fact[i] = (fact[i - 1] * i) % md;
  }
}
long long ncr(long long n, long long r) {
  return (((fact[n] * inv[r]) % md) * inv[n - r]) % md;
}
void UltraSieve(long long n, long long s[]) {
  bool prime[n + 1];
  memset(prime, true, sizeof(prime));
  for (long long i = 2; i <= n; i += 2) s[i] = 2;
  for (long long p = 2; p * p <= n; p++) {
    if (prime[p] == true) {
      for (long long i = p * p; i <= n; i += p) {
        prime[i] = false;
        s[i] = i;
      }
    }
  }
  for (long long p = 2; p <= n; p++)
    if (prime[p]) s[p] = p;
}
void sieveOfEratosthenes(long long N, long long s[]) {
  vector<bool> prime(N + 1, false);
  for (long long i = 2; i <= N; i += 2) s[i] = 2;
  for (long long i = 3; i <= N; i += 2) {
    if (prime[i] == false) {
      s[i] = i;
      for (long long j = i; j * i <= N; j += 2) {
        if (prime[i * j] == false) {
          prime[i * j] = true;
          s[i * j] = i;
        }
      }
    }
  }
}
unordered_map<long long, long long> generatePrimeFactors(long long N) {
  long long s[N + 1];
  unordered_map<long long, long long> mp;
  sieveOfEratosthenes(N, s);
  long long curr = s[N];
  long long cnt = 1;
  while (N > 1) {
    N /= s[N];
    if (curr == s[N]) {
      cnt++;
      continue;
    }
    mp[curr] = cnt;
    curr = s[N];
    cnt = 1;
  }
  return mp;
}
void q();
void q1();
void q2();
void q3();
void q4();
void q5();
void q6();
void q7();
void q8();
void q9();
void q10();
void q11();
void q12();
void s();
void perm();
void q() {
  long long n, m, r, c;
  cin >> n >> m >> r >> c;
  long long ans = 0;
  ans = max({r + c - 2, n - r + m - c, r - 1 + m - c, c - 1 + n - r});
  cout << ans << "\n";
}
void q2() {
  long long n, k;
  cin >> n >> k;
  vector<long long> v(n, 0);
  unordered_map<long long, pair<long long, long long>> mp;
  for (long long i = 0; i < n; i++) {
    cin >> v[i];
    mp[v[i]].first++;
  }
  long long j = 0;
  for (long long i = 0; i < (long long)v.size(); i++) {
    j = i;
    while (j < (long long)v.size() && v[j] == v[i]) {
      j++;
    }
    mp[v[i]].second += pow(2, j - i);
    i = --j;
  }
  vector<long long> indices;
  long long mx_c = INT_MIN, mx, mn = INT_MAX;
  for (auto m : mp) {
    if (m.second.first >= mx_c) {
      if (m.second.first == mx_c) {
        if (m.second.second < mn) {
          mn = m.second.second;
          mx = m.first;
        }
      } else {
        mx_c = m.second.first;
        mx = m.first;
      }
    }
  }
  for (long long i = 0; i < n; i++) {
    if (v[i] != mx) indices.push_back(i);
  }
  long long ans = 0;
  for (long long i = 0; i < (long long)indices.size(); i++) {
    j = i;
    while (j < (long long)indices.size() && indices[j] - indices[i] + 1 <= k) {
      j++;
    }
    i = --j;
    ans++;
  }
  cout << ans << "\n";
}
void q3() {
  long long a, b, n;
  cin >> a >> b >> n;
  long long k = a;
  for (long long i = 0; i < 10; i++) {
    if ((a * 10 + i) % b == 0) {
      a = a * 10 + i;
      break;
    }
  }
  if (a == k)
    cout << -1;
  else
    cout << (to_string(a).append(string(n - 1, '0')));
}
int32_t main() {
  q3();
  return 0;
}

```