#include <bits/stdc++.h>
using namespace std;
ifstream f("ecuatie.in");
ofstream g("ecuatie.out");
bool isInt(double x)
{
return x==floor(x);
}
bool isSolution(int d,double x1,double x2,int A)
{
return isInt((double)x1*d) && isInt((double)x2*(A/d));
}
string str(int x,bool ignore1=0,bool addplus=0)
{
if(ignore1)
if(x==1) return "";
else if(x==-1) return "-";
string s=to_string(x);
if(addplus && x>=0) return "+"+s;
else return s;
}
string translate(int p1,int q1,int p2,int q2)
{
return "("+str(p1,1)+"x"+str(q1,0,1)+")("+str(p2,1)+"x"+str(q2,0,1)+")";
}
int main()
{
int A,B,C,K;
f>>A>>B>>C>>K;
int delta=B*B-4*A*C;
if(delta<0) { g<<-1; return 0;}
int sqd=(int)sqrt(delta);
if(sqd*sqd!=delta) {g<<-1; return 0;}
double x1,x2;
x1=(-B-sqd)/(2*A), x2=(-B+sqd)/(2*A);
vector<pair<pair<int,int>,pair<int,int>>> R;
#define P1 first.first
#define Q1 first.second
#define P2 second.first
#define Q2 second.second
auto genSol=[&x1,&x2,&A,&R](int i)
{
if(isSolution( i,x1,x2,A)) R.push_back({{i,-x1*i},{A/i,-x2*(A/i)}});
if(isSolution( i,x2,x1,A)) R.push_back({{i,-x2*i},{A/i,-x1*(A/i)}});
};
int sqA=sqrt(A);
for(int i=1;i<=sqA;i++)
if(A%i==0)
genSol(i),genSol(-i),genSol(A/i),genSol(-A/i);
sort(R.begin(),R.end());
vector<int> eraser;
for(int i=1;i<R.size();i++)
if(R[i]==R[i-1]) eraser.push_back(i);
int index=0;
for(auto e:eraser)
{
R.erase(R.begin()+e-index);
index++;
}
if(K>R.size()) {g<<-1; return 0;}
else g<<translate(R[K-1].P1,R[K-1].Q1,R[K-1].P2,R[K-1].Q2);
return 0;
}