#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
long long getnumbychar(char c)
{
long long num;
if(c >= '0' && c <= '9')
{
num = c - '0';
}
else
{
num = c - 'a' + 10;
}
return num;
}
long long getradix(char s[])
{
int len = strlen(s), i;
long long cur, radix = -1;
for(i = 0; i < len; i++)
{
cur = getnumbychar(s[i]);
if(cur > radix)
{
radix = cur;
}
}
radix++;
if(radix < 2)
{
radix = 2;
}
return radix;
}
long long getnum(char s[], long long radix)
{
int len = strlen(s), i;
long long num = 0, cur;
for(i = 0; i < len; i++)
{
cur = getnumbychar(s[i]);
num = num * radix + cur;
}
return num;
}
long long getres(char s[], long long low, long long high, long long goal)
{
long long mid, cur;
while(low < high)
{
mid = (low + high) / 2;
cur = getnum(s, mid);
if(cur < 0 || cur >= goal)
{
high = mid;
}
else
{
low = mid + 1;
}
}
return high;
}
int main()
{
char n1[20], n2[20];
int tag;
long long radix;
scanf("%s%s%d%lld", n1, n2, &tag, &radix);
char temp[20];
if(tag == 2)
{
strcpy(temp, n1);
strcpy(n1, n2);
strcpy(n2, temp);
}
long long low = getradix(n2), goal = getnum(n1, radix), high = goal + 1;
long long res = getres(n2, low, high, goal);
if(getnum(n2, res) == goal)
{
printf("%lld\n", res);
}
else
{
printf("Impossible\n");
}
system("pause");
return 0;
}