
#include<bits/stdc++.h>
using namespace std;
int charToInt(char ch)
{
int rs= 0;
if(ch >= '0' && ch <= '9')
{
rs = ch - '0';
}
if(ch >= 'a' && ch <= 'z')
{
rs = ch - 'a' + 10;
}
return rs;
}
long long changeToDecimal(string s,long long radix)
{
long long result = 0;
for(int i = 0; i < s.length(); i++)
{
result = result*radix + charToInt(s[i]);
}
return result;
}
int compare(long long n1, string n2, long long radix)
{
long long sum = 0;
for (int i = 0; i < n2.length(); i++)
{
sum = sum * radix + charToInt(n2[i]);
if (sum > n1)
{
return 1;
}
}
if (sum > n1)
{
return 1;
}
else if (sum < n1)
{
return -1;
}
else
{
return 0;
}
}
long long Binary_Search(long long n,string p)
{
int max = 0;
for(int i = 0; i < p.length(); i++)
{
if(max < charToInt(p[i]))
{
max = charToInt(p[i]);
}
}
long long low = (long long)max + 1;
long long high;
if(n > low)
{
high = n + 1;
}
else
{
high = low + 1;
}
long long mid;
while(low < high)
{
mid = (low + high)/2;
if(compare(n,p,mid) == 0)
{
return mid;
}
else if(compare(n,p,mid) == 1)
{
high = mid;
}
else
{
low = mid;
}
}
return -1;
}
int main()
{
string n1,n2,temp;
int tag;
long long radix;
cin >>n1;
cin >> n2;
cin >> tag;
cin >> radix;
long long sum1,sum2;
if(tag==2)
{
temp=n1;
n1=n2;
n2=temp;
}
sum1 = changeToDecimal(n1,radix);
if(Binary_Search(sum1,n2) == -1)
{
cout << "Impossible" << endl;
}
else
{
cout << Binary_Search(sum1,n2) << endl;
}
return 0;
}