#include <stdio.h>
#include <math.h>
long a,b,c,k,r,delta,l1,l2;
long d1[35000],d2[35000];
long i,sol=0;
double daux,aux,x1,x2,q11,q12,q21,q22;
int main(){
freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","w",stdout);
scanf ("%ld %ld %ld %ld",&a,&b,&c,&k);
delta=b*b-4*a*c;
r=sqrt(delta);
if (r*r!=delta){printf("-1\n");return 0;}
x1=(double)(-b-r)/(2*a);
x2=(double)(-b+r)/(2*a);
l1=0;
for (i=1;i<sqrt(a);i++)
if (!(a%i)){
d1[++l1]=i;
d2[++l2]=a/i;
}
r=sqrt(a);
if (r*r==a)d1[++l1]=r;
//for (i=1;i<=l1;i++)printf("%ld ",d1[i]);
//for (i=l2;i>0;i--)printf("%ld ",d2[i]);
for (i=1;i<=l2;i++){
d2[i]=-d2[i];
q11=-x1*d2[i];
q12=-x2*d2[i];
q21=-x2*(a/d2[i]);
q22=-x1*(a/d2[i]);
if (q11>q12){
aux=q11;q11=q12;q12=aux;
aux=q21;q21=q22;q22=aux;
}
sol++;
if (sol==k){
if (d2[i]==1)printf("(x");
else
if (d2[i]==-1)printf("(-x");
else printf("(%ldx",d2[i]);
if (q11<0)printf("%ld",(long)q11);
else printf("+%ld",(long)q11);
printf(")");
//a doua parte
if (a/d2[i]==1)printf("(x");
else
if (a/d2[i]==-1)printf("(-x");
else printf("(%ldx",a/d2[i]);
if (q21<0)printf("%ld",(long)q21);
else printf("+%ld",(long)q21);
printf(")\n");
return 0;
}
sol++;
if (sol==k){
//acelasi p1 dar q12 diferit
if (d2[i]==1)printf("(x");
else
if (d2[i]==-1)printf("(-x");
else printf("(%ldx",d2[i]);
if (q12<0)printf("%ld",(long)q12);
else printf("+%ld",(long)q12);
printf(")");
//a doua parte
if (a/d2[i]==1)printf("(x");
else
if (a/d2[i]==-1)printf("(-x");
else printf("(%ldx",a/d2[i]);
if (q22<0)printf("%ld",(long)q22);
else printf("+%ld",(long)q22);
printf(")\n");
return 0;
}
d2[i]=-d2[i];
}
//al doilea vect de divizori
for (i=l1;i>0;i--){
daux=d2[i];
d2[i]=-d1[i];
q11=-x1*d2[i];
q12=-x2*d2[i];
q21=-x2*(a/d2[i]);
q22=-x1*(a/d2[i]);
if (q11>q12){
aux=q11;q11=q12;q12=aux;
aux=q21;q21=q22;q22=aux;
}
sol++;
if (sol==k){
if (d2[i]==1)printf("(x");
else
if (d2[i]==-1)printf("(-x");
else printf("(%ldx",d2[i]);
if (q11<0)printf("%ld",(long)q11);
else printf("+%ld",(long)q11);
printf(")");
//a doua parte
if (a/d2[i]==1)printf("(x");
else
if (a/d2[i]==-1)printf("(-x");
else printf("(%ldx",a/d2[i]);
if (q21<0)printf("%ld",(long)q21);
else printf("+%ld",(long)q21);
printf(")\n");
return 0;
}
sol++;
if (sol==k){
//acelasi p1 dar q12 diferit
if (d2[i]==1)printf("(x");
else
if (d2[i]==-1)printf("(-x");
else printf("(%ldx",d2[i]);
if (q12<0)printf("%ld",(long)q12);
else printf("+%ld",(long)q12);
printf(")");
//a doua parte
if (a/d2[i]==1)printf("(x");
else
if (a/d2[i]==-1)printf("(-x");
else printf("(%ldx",a/d2[i]);
if (q22<0)printf("%ld",(long)q22);
else printf("+%ld",(long)q22);
printf(")\n");
return 0;
}
d2[i]=daux;
}
//////////////////////
// pentru p1 pozitiv
//////////////////////////
for (i=1;i<=l1;i++){
daux=d2[i];
d2[i]=d1[i];
q11=-x1*d2[i];
q12=-x2*d2[i];
q21=-x2*(a/d2[i]);
q22=-x1*(a/d2[i]);
if (q11>q12){
aux=q11;q11=q12;q12=aux;
aux=q21;q21=q22;q22=aux;
}
sol++;
if (sol==k){
if (d2[i]==1)printf("(x");
else
if (d2[i]==-1)printf("(-x");
else printf("(%ldx",d2[i]);
if (q11<0)printf("%ld",(long)q11);
else printf("+%ld",(long)q11);
printf(")");
//a doua parte
if (a/d2[i]==1)printf("(x");
else
if (a/d2[i]==-1)printf("(-x");
else printf("(%ldx",a/d2[i]);
if (q21<0)printf("%ld",(long)q21);
else printf("+%ld",(long)q21);
printf(")\n");
return 0;
}
sol++;
if (sol==k){
//acelasi p1 dar q12 diferit
if (d2[i]==1)printf("(x");
else
if (d2[i]==-1)printf("(-x");
else printf("(%ldx",d2[i]);
if (q12<0)printf("%ld",(long)q12);
else printf("+%ld",(long)q12);
printf(")");
//a doua parte
if (a/d2[i]==1)printf("(x");
else
if (a/d2[i]==-1)printf("(-x");
else printf("(%ldx",a/d2[i]);
if (q22<0)printf("%ld",(long)q22);
else printf("+%ld",(long)q22);
printf(")\n");
return 0;
}
d2[i]=daux;
}
//al doilea vect de div
for (i=l2;i>0;i--){
//d2[i]=-d2[i];
q11=-x1*d2[i];
q12=-x2*d2[i];
q21=-x2*(a/d2[i]);
q22=-x1*(a/d2[i]);
if (q11>q12){
aux=q11;q11=q12;q12=aux;
aux=q21;q21=q22;q22=aux;
}
sol++;
if (sol==k){
if (d2[i]==1)printf("(x");
else
if (d2[i]==-1)printf("(-x");
else printf("(%ldx",d2[i]);
if (q11<0)printf("%ld",(long)q11);
else printf("+%ld",(long)q11);
printf(")");
//a doua parte
if (a/d2[i]==1)printf("(x");
else
if (a/d2[i]==-1)printf("(-x");
else printf("(%ldx",a/d2[i]);
if (q21<0)printf("%ld",(long)q21);
else printf("+%ld",(long)q21);
printf(")\n");
return 0;
}
sol++;
if (sol==k){
//acelasi p1 dar q12 diferit
if (d2[i]==1)printf("(x");
else
if (d2[i]==-1)printf("(-x");
else printf("(%ldx",d2[i]);
if (q12<0)printf("%ld",(long)q12);
else printf("+%ld",(long)q12);
printf(")");
//a doua parte
if (a/d2[i]==1)printf("(x");
else
if (a/d2[i]==-1)printf("(-x");
else printf("(%ldx",a/d2[i]);
if (q22<0)printf("%ld",(long)q22);
else printf("+%ld",(long)q22);
printf(")\n");
return 0;
}
//d2[i]=-d2[i];
}
printf("-1\n");
return 0;
}