#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
int N, K, P;
vector<int> temp, ans, fac;
int maxfac = -1;
void init(){
fac.push_back(0);
int i = 1;
while((int)pow(i, P) <= N){
fac.push_back((int)pow(i, P));
i++;
}
}void dfs(int step, int sum, int index, int facsum){
if(index <= 0) return;
if(step == K || index <= 0){
if(sum == N && facsum > maxfac){
ans = temp;
maxfac = facsum;
}
return;
}
if(sum + fac[index] <= N){
temp.push_back(index);
dfs(step+1, sum + fac[index], index, facsum+index);
temp.pop_back();
}
dfs(step, sum, index-1, facsum);
}
int main(){
scanf("%d %d %d", &N, &K, &P);
init();
dfs(0, 0, fac.size()-1, 0);
if(maxfac != -1){
printf("%d = %d^%d", N, ans[0], P);
for(int i = 1; i < K; i++){
printf(" + %d^%d", ans[i], P);
}
}else printf("Impossible\n");
return 0;
}