#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef complex<double> P;
typedef pair<int,int> pii;
#define REP(i,n) for(ll i=0;i<n;++i)
#define REPR(i,n) for(ll i=1;i<n;++i)
#define FOR(i,a,b) for(ll i=a;i<b;++i)

#define DEBUG(x) cout<<#x<<": "<<x<<endl
#define DEBUG_VEC(v) cout<<#v<<":";REP(i,v.size())cout<<" "<<v[i];cout<<endl
#define ALL(a) (a).begin(),(a).end()

#define MOD (ll)(1e9+7)
#define ADD(a,b) a=((a)+(b))%MOD
#define FIX(a) ((a)%MOD+MOD)%MOD

int calc(string s){
  assert(s.size()==7);
  stack<int> st;
  REP(i,s.size()){
    char c = s[i];
    if(c=='+'){
      if(st.size()<2) return -1;
      int a = st.top(); st.pop();
      a += st.top(); st.pop();
      st.push(a);
    }else if(c=='-'){
      if(st.size()<2) return -1;
      int a = st.top(); st.pop();
      a -= st.top(); st.pop();
      st.push(a);
    }else if(c=='*'){
      if(st.size()<2) return -1;
      int a = st.top(); st.pop();
      a *= st.top(); st.pop();
      st.push(a);
    }else{
      st.push((int)(c-'0'));
    }
  }
  assert(st.size()==1);
  return st.top();
}

void output(string s){
  stack<string> st;
  REP(i,s.size()){
    char c = s[i];
    if(c=='+' || c=='-' || c=='*'){
      if(st.size()<2) assert(false&&"NO STACK");
      string a = "(";
      a += st.top(); st.pop();
      a += c;
      a += st.top(); st.pop();
      a += ")";
      st.push(a);
    }else{
      st.push(string(1,c));
    }
  }
  assert(st.size()==1);
  cout<<st.top()<<endl;
}

int main(){
  int a[4];
  while(~scanf("%d%d%d%d",a,a+1,a+2,a+3)){
    if(a[0]==0 && a[1]==0 && a[2]==0 && a[3]==0)break;
    // ???????????????????¨????
    vi expr(7,0);
    FOR(i,4,7)expr[i]=1;
    vi numlst(4);
    REP(i,4)numlst[i]=i;
    bool flag = false;
    do{
      if(flag)break;
      if(expr[0]==1 || expr[1]==1) continue;
      if(expr[6]==0) continue;
      REP(exmsk,3*3*3){
        if(flag)break;
        do{
          if(flag)break;
          string s = "";
          int i1=0;
          int tmp = exmsk;
          REP(i,7){
            if(expr[i]==0){
              s += (char)(a[numlst[i1]]+'0');
              ++i1;
            }else{
              s += "+-*"[tmp%3];
              tmp /= 3;
            }
          }
          int res = calc(s);
          if(res==10){
            flag = true;
            output(s);
            break;
          }
        }while(next_permutation(ALL(numlst)));
      }
    }while(next_permutation(ALL(expr)));
    if(!flag)cout<<0<<endl;
  }
  return 0;
}