#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <functional>
#include <string>
#include <queue>
#include <string.h>
using namespace std;
long long int A;
char strA[20],strB[20];
int which, radix;
#define MAXR 60
int charToInt(char ch)
{
if(ch>='0' && ch<='9')
return ch-'0';
return ch-'a'+10;
}
long long int toInt(char* str, int radix)
{
long long int sum=0;
for(int i=0;i<strlen(str);i++)
{
sum = sum*radix + charToInt(str[i]);
}
return sum;
}
bool cmp(int a, long long int target)
{
return toInt(strB,a) < target;
}
int main()
{
scanf("%s %s %d %d",strA,strB,&which,&radix);
if(which == 2)
{
A = toInt(strB,radix);
strcpy(strB,strA);
}else
{
A = toInt(strA,radix);
}
int radixs[MAXR];
for(int i=0;i<MAXR;i++)
radixs[i] = i+1;
char* maxD = max_element(strB,strB+strlen(strB));
int imax;
if(*maxD>='a' && *maxD<='z')
imax = *maxD-'a'+10;
else
imax = *maxD-'0';
int * res = lower_bound(radixs+imax,radixs+MAXR,A,cmp);
if(res != radixs+MAXR && A == toInt(strB,*res))
{
printf("%d",*res);
}else
printf("Impossible");
return 0;
}