#include <algorithm>
#include <set>
#include <cstdlib>
#include <cmath>
using namespace std;
#define in insert
#define mp make_pair
#define p1 first.first
#define q1 first.second
#define p2 second.first
#define q2 second.second
set <pair <pair <int,double>,pair <int,double> > > v;
char s[10],aux[10];
int a,b,c,k,P1,Q1,P2,Q2;
double d,x1,x2;
void ecuatie ()
{
d=sqrt (b*b-4*a*c);
if ((double)d!=(int)d)
exit (0);
x1=(double)(-b+d)/(2*a);
x2=(double)(-b-d)/(2*a);
}
void divizori ()
{
int i,lim;
for (lim=abs (a), i=1; i*i<=lim; ++i)
{
if ((int)(-x1*i)==(double)(-x1*i) && (int)(-x2*(a/i))==(double)(-x2*(a/i)))
{
v.in (mp (mp (i,-x1*i),mp (a/i,-x2*(a/i))));
v.in (mp (mp (-i,x1*i),mp (-a/i,x2*(a/i))));
v.in (mp (mp (a/i,-x2*(a/i)),mp (i,-x1*i)));
v.in (mp (mp (-a/i,x2*(a/i)),mp (-i,x1*i)));
}
if ((int)(-x2*i)==(double)(-x2*i) && (int)(-x1*(a/i))==(double)(-x1*(a/i)))
{
v.in (mp (mp (i,-x2*i),mp (a/i,-x1*(a/i))));
v.in (mp (mp (-i,x2*i),mp (-a/i,x1*(a/i))));
v.in (mp (mp (a/i,-x1*(a/i)),mp (i,-x2*i)));
v.in (mp (mp (-a/i,x1*(a/i)),mp (-i,x2*i)));
}
}
}
void baga (int nr, int &start)
{
int i,j;
for (i=0; nr; ++i, nr/=10)
aux[i]=nr%10+'0';
aux[i]='\0';
for (j=start; j<start+i; ++j)
s[j]=aux[i-(j-start+1)];
}
void solve ()
{
set <pair <pair <int,double>,pair <int,double> > > :: iterator it;
int i,nr;
for (i=1, it=v.begin (); i<=k && it!=v.end (); ++i, ++it)
{
P1=it->p1;
Q1=(int)it->q1;
P2=it->p2;
Q2=(int)it->q2;
}
if (i!=k+1)
printf ("-1");
else
{
s[nr=0]='(';
if (P1!=1)
baga (P1,++nr);
s[++nr]='x';
if (Q1<0)
s[++nr]='-';
else
s[++nr]='+';
baga (abs (Q1),++nr);
s[++nr]=')';
s[++nr]='(';
if (P2!=1)
baga (P2,++nr);
s[++nr]='x';
if (Q2<0)
s[++nr]='-';
else
s[++nr]='+';
baga (abs (Q2),++nr);
s[++nr]=')';
s[++nr]='\0';
printf ("%s",s);
}
}
int main ()
{
freopen ("ecuatie.in","r",stdin);
freopen ("ecuatie.out","w",stdout);
scanf ("%d%d%d%d",&a,&b,&c,&k);
ecuatie ();
divizori ();
solve ();
return 0;
}