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

#include <cctype>
#include <cstdio>
#include <vector>

inline unsigned int val(const char& c, const unsigned int& base) {return (isdigit(c) ? c-'0' : c-'A'+10);}
inline unsigned int chr(const unsigned int& n, const unsigned int& base) {return (n<10 ? n+'0' : (n-10)+'A');}

int main()
{
	unsigned int n, d, base;
	std::scanf("%u %u %u", &n, &d, &base);
	std::vector<unsigned int> input(n+2);

	char c;
	for (int i = n-1; i >= 0; i--)
	{
		do {std::scanf("%c", &c);} while (!isalpha(c) && !isdigit(c));
		input[i] = val(c, base);
	}
	input[n] = input[n+1] = 0;

	std::vector<unsigned int> match(n+2);
	match[n] = match[n+1] = 0;
	match[n-1] = 0;
	for (int i = n-2; i >= 0; i--)
		match[i] = match[i+1] + (input[i+1] == d);

	std::vector<unsigned int> answer(n+1, 0);
	unsigned int carry = 0;
	for (unsigned int i = 0; i < answer.size(); i++)
	{
		answer[i] += carry;
		answer[i] += (i+1)*input[i+1];
		if (input[i] > d) answer[i]++;
		answer[i] += input[i]*match[i];
		if (!i) answer[i] += match[0] + (input[0] == d);
		if (!d && i <= n-1 && answer[i]) answer[i]--;
		carry = answer[i] / base;
		answer[i] %= base;
	}

	bool printed = false;
	for (int i = answer.size()-1; i >= 0; i--)
	{
		if (printed || answer[i])
		{
			printed = true;
			std::printf("%c", chr(answer[i], base));
		}
	}

	std::printf("\n");

	return 0;
}
