/*
TASK:digits
LANG:C++
*/

#include <iostream>

using namespace std;

long R,M,K;
int N[1000001], L[1000001];
char n[1000001];
long zn_cifri = 1;
long long br = 0;

int convAtoN(char c) {
  if (c >= '0' && c <= '9') return c - '0';
  return 10 + c - 'A';
}

char convNtoA(int i) {
  if (i >= 0 && i <= 9) return '0' + i;
  else return i - 10 + 'A';
}

long long conv(long long br) {
  if (br == 0) { return 0; }
  conv(br/10);
  cout << convNtoA(br%K);
}

int main () {
  long long i, j ,k;
  cin >> R >> M >> K;
  cin.getline(n,R); cin.getline(n,R+1);
  for (i=1; i <= R; i++) N[i] = convAtoN(n[i-1]);

  i = 1; L[R] = 0; zn_cifri = 1;
  start:
  while (N[i] != L[i]) {
    L[R]++;
    k=0;
    while (L[R-k]==K) {
      L[R-k] = 0; if (k+2 > zn_cifri) zn_cifri++; L[R-k-1]++; k++;
    }
    for (j = R - zn_cifri + 1; j <= R; j++)
      if (L[j] == M) br++;  //cout << " " << zn_cifri << " "  << endl;
  }
  i++;
  if (i <= R) goto start;
  conv(br); cout << endl;
}
