#include <bits/stdc++.h>
using namespace std;
string a, b, c;
string arr[3];
int dist[11][11][11][11];
struct ver {
  int x, y, z, carry, dist, px, pz, py, pcarry;
  pair<int, int> P;
  ver(int a, int b, int c, int d, int e)
      : x(a),
        y(b),
        z(c),
        carry(d),
        dist(e),
        px(-1),
        pz(-1),
        py(-1),
        pcarry(-1) {}
  ver() {}
};
ver par[11][11][11][11];
bool operator<(const ver &a, const ver &b) { return a.dist > b.dist; }
int sol() {
  priority_queue<ver> Q;
  Q.push(ver(0, 0, 0, 0, 0));
  while (Q.size()) {
    ver t = Q.top();
    Q.pop();
    if (t.dist >= dist[t.x][t.y][t.z][t.carry] || t.x > a.size() ||
        t.y > b.size() || t.z > c.size())
      continue;
    dist[t.x][t.y][t.z][t.carry] = t.dist;
    par[t.x][t.y][t.z][t.carry] = ver(t.px, t.py, t.pz, t.pcarry, 0);
    par[t.x][t.y][t.z][t.carry].P = make_pair(t.P.first, t.P.second);
    if (t.x == (int)a.size() && t.y == (int)b.size() && t.z == (int)c.size() &&
        t.carry == 0)
      return t.dist;
    if (t.x == a.size() - 1) {
      t.x++;
      Q.push(t);
      t.x--;
    }
    if (t.y == b.size() - 1) {
      t.y++;
      Q.push(t);
      t.y--;
    }
    if (t.z == c.size() - 1) {
      t.z++;
      Q.push(t);
      t.z--;
    }
    int A = (t.x < (int)a.size()) ? (a[t.x] - '0') : 0;
    int B = (t.y < (int)b.size()) ? (b[t.y] - '0') : 0;
    int R = (t.z < (int)c.size()) ? (c[t.z] - '0') : 0;
    for (int i = 0; i < 10; i++)
      for (int j = 0; j < 10; j++) {
        ver t2;
        if (t.x < a.size())
          t2.x = t.x + (A == i);
        else
          t2.x = t.x + (i != 0);
        if (t.y < b.size())
          t2.y = t.y + (B == j);
        else
          t2.y = t.y + (j != 0);
        int L = (i + j + t.carry);
        if (t.z < c.size())
          t2.z = t.z + (R == L % 10);
        else
          t2.z = t.z + (L % 10 != 0);
        t2.carry = L / 10;
        t2.dist = t.dist + (int)(A != i) + (int)(B != j) + (int)(R != (L % 10));
        t2.px = t.x, t2.py = t.y, t2.pz = t.z, t2.pcarry = t.carry;
        t2.P = make_pair(i, j);
        Q.push(t2);
      }
  }
  return -1;
}
string ansA, ansB, ansC;
void construct(ver t) {
  if (t.x == -1 && t.carry == -1) return;
  int L = t.P.first + t.P.second + t.carry;
  ansA += (char)(t.P.first + '0');
  ansB += (char)(t.P.second + '0');
  ansC += (char)((L % 10) + '0');
  construct(par[t.x][t.y][t.z][t.carry]);
}
void pad(string &s) {
  string str;
  bool flag = 0;
  for (int i = 0; i < s.size(); i++) {
    flag |= (s[i] != '0');
    if (flag) str += s[i];
  }
  s = str;
}
int main() {
  for (int i = 0; i < 11; i++)
    for (int j = 0; j < 11; j++)
      for (int k = 0; k < 11; k++)
        for (int m = 0; m < 11; m++) dist[i][j][k][m] = 1e9;
  char cc;
  string str;
  cin >> str;
  stringstream ss(str);
  str = str + "*";
  for (int i = 0; i < 3; i++) {
    while (ss >> cc) {
      if (!isdigit(cc)) break;
      arr[i] += cc;
    }
    reverse(arr[i].begin(), arr[i].end());
  }
  a = arr[0] + '-', b = arr[1] + '-', c = arr[2] + '-';
  int ans = sol();
  construct(par[a.size()][b.size()][c.size()][0]);
  pad(ansA), pad(ansB), pad(ansC);
  cout << ansA << "+" << ansB << "=" << ansC << endl;
}
