#include <iostream>
#include<vector>
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int n, k, p, maxFacSum = -1;
vector<int> v, ans, tempAns;
void init(){
int i = 1, num =0;
while(num<=n){
v.push_back(num);
num = pow(i,p);
i++;
}
}
void dfs(int index, int tempSum, int tempK, int facSum) {
if (tempK == k) {
if (tempSum == n && facSum > maxFacSum) {
ans = tempAns;
maxFacSum = facSum;
}
return;
}
while(index >= 1) {
if (tempSum + v[index] <= n) {
tempAns[tempK] = index;
dfs(index, tempSum + v[index], tempK + 1, facSum + index);
}
if (index == 1) return;
index--;
}
}
int main()
{
freopen("1103.txt","r",stdin);
cin>>n>>k>>p;
tempAns.resize(k); 这个不能少了 不然会爆炸 debug 不了
init();
dfs(v.size() - 1,0,0,0);
int x = maxFacSum;
int y = x;
if(maxFacSum ==-1 ){
cout<<"Impossible";
return 0;
}else{
printf("%d = ",n);
for(int i = 0; i < k; i++){
printf("%d^%d",ans[i],p);
if(i<k-1) cout<<" + ";
else printf("\n");
}
}
//cout << "Hello world!" << endl;
return 0;
}