#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>using namespace std;vector<int> path, res;
int k, p, flag, maxsum;int getpow(int n)
{int f = n, i;for(i = 1; i < p; i++){f *= n;}return f;
}void dfs(int cur, int curn, int curcount, int cursum)
{if(curn == 0 && curcount == k){flag = 1;if(cursum > maxsum){maxsum = cursum;res = path;}return;}int i, curpow, count;for(i = cur; i >= 1; i--){curpow = getpow(i);count = k - curcount;if(curn <= curpow * count && curn >= count){path.push_back(i);dfs(i, curn - curpow, curcount + 1, cursum + i);path.pop_back();}}
}int main()
{int n;scanf("%d%d%d", &n, &k, &p);int i;for(i = pow(n, 1.0 / p); i >= 1; i--){dfs(i, n, 0, 0);}int size;if(flag == 1){printf("%d = ", n);size = res.size();for(i = 0; i < size; i++){if(i > 0){printf(" + ");}printf("%d^%d", res[i], p);}printf("\n");}else{printf("Impossible\n");}system("pause");return 0;
}