#include <cstdio>
#include <cstdlib>
#include <cmath>
#define MAX 1000000
int sol[MAX][4],ns=0;
int m0,p10,q10,p20,q20;
void printeq(FILE* fout,int eq[]){
fputc('(',fout);
if(eq[0]!=1&&eq[0]!=-1){
fprintf(fout,"%d",eq[0]);
}else if(eq[0]==-1){
fprintf(fout,"-");
}
fprintf(fout,"x%c%u)(",(eq[1]>0)?'+':'-',(eq[1]>0)?eq[1]:-eq[1]);
if(eq[2]!=1&&eq[2]!=-1){
fprintf(fout,"%d",eq[2]);
}else if(eq[2]==-1){
fprintf(fout,"-");
}
fprintf(fout,"x%c%u)\n",(eq[3]>0)?'+':'-',(eq[3]>0)?eq[3]:-eq[3]);
}
void reduce(int& a,int& b){
int a0=(a<0)?-a:a,b0=(b<0)?-b:b,r;
while(b0){
r=a0%b0;
a0=b0;
b0=r;
}
a/=a0;
b/=a0;
}
void addSol(int k){
sol[ns][0]=p10*k;
sol[ns][1]=-q10*k;
sol[ns][2]=p20*m0/k;
sol[ns][3]=-q20*m0/k;
ns++;
sol[ns][2]=p10*k;
sol[ns][3]=-q10*k;
sol[ns][0]=p20*m0/k;
sol[ns][1]=-q20*m0/k;
ns++;
}
int comp(const void* p1,const void* p2){
int *v1=(int*)p1,*v2=(int*)p2;
if(v1[0]-v2[0]==0){
return v1[1]-v2[1];
}else{
return v1[0]-v2[0];
}
}
int main(){
int a,b,c,d,i,k,c1,c2,d1,d2;
FILE* fin=fopen("ecuatie.in","r");
FILE* fout=fopen("ecuatie.out","w");
fscanf(fin,"%d %d %d %d",&a,&b,&c,&k);
d=b*b-4*a*c;
if(d>0&&(i=sqrt(d))*i==d){
c1=-b+i,c2=-b-i,d1=d2=2*a;
reduce(c1,d1);
reduce(c2,d2);
m0=a/(d1*d2),p10=d1,q10=c1,p20=d2,q20=c2;
for(int i=1;i<=abs((m0>>1));i++){
if(m0%i==0){
addSol(i),addSol(-i);
}
}
addSol(m0),addSol(-m0);
qsort(sol,ns,sizeof(int)*4,comp);
if(k<ns){
printeq(fout,sol[k-1]);
}else{
fprintf(fout,"-1");
}
}else{
fprintf(fout,"-1");
}
return 0;
}