#include <bits/stdc++.h>
using namespace std;
char A[10], B[10], C[10];
int best[11][11][11][11][11][11][2];
int a, b, c;
string ret1, ret2, ret3;
int solve(int ind1, int ind2, int ind3, int l1, int l2, int l3, bool carry) {
  if (l1 > 10 || l2 > 10 || l3 > 10) return 1 << 30;
  if (ind1 == 0 && ind2 == 0 && ind3 == 0) {
    if (carry) return 1;
    return -(l1 + l2 + l3);
  }
  if (best[ind1][ind2][ind3][l1][l2][l3][carry] != -1)
    return best[ind1][ind2][ind3][l1][l2][l3][carry];
  int ret = 1 << 28;
  int i, j, k;
  if (ind1 > 0) {
    i = A[ind1] - '0';
    for (j = 0; j < 10; j++) {
      k = (i + j + carry) % 10;
      int toAdd = 0, nind1 = ind1, nind2 = ind2, nind3 = ind3,
          ncarry = (i + j + carry > 9);
      if (ind1 > 0 && i == A[ind1] - '0')
        nind1--;
      else
        toAdd++;
      if (ind2 > 0 && j == B[ind2] - '0')
        nind2--;
      else
        toAdd++;
      if (ind3 > 0 && k == C[ind3] - '0')
        nind3--;
      else
        toAdd++;
      ret = min(ret, solve(nind1, nind2, nind3, (i ? 0 : (l1 + 1)),
                           (j ? 0 : (l2 + 1)), (k ? 0 : (l3 + 1)), ncarry) +
                         toAdd);
    }
  }
  if (ind2 > 0) {
    j = B[ind2] - '0';
    for (i = 0; i < 10; i++) {
      k = (i + j + carry) % 10;
      int toAdd = 0, nind1 = ind1, nind2 = ind2, nind3 = ind3,
          ncarry = (i + j + carry > 9);
      if (ind1 > 0 && i == A[ind1] - '0')
        nind1--;
      else
        toAdd++;
      if (ind2 > 0 && j == B[ind2] - '0')
        nind2--;
      else
        toAdd++;
      if (ind3 > 0 && k == C[ind3] - '0')
        nind3--;
      else
        toAdd++;
      ret = min(ret, solve(nind1, nind2, nind3, (i ? 0 : (l1 + 1)),
                           (j ? 0 : (l2 + 1)), (k ? 0 : (l3 + 1)), ncarry) +
                         toAdd);
    }
  }
  if (ind3 > 0) {
    k = C[ind3] - '0';
    for (i = 0; i < 10; i++) {
      j = (k - i - carry + 10) % 10;
      int toAdd = 0, nind1 = ind1, nind2 = ind2, nind3 = ind3,
          ncarry = (i + j + carry > 9);
      if (ind1 > 0 && i == A[ind1] - '0')
        nind1--;
      else
        toAdd++;
      if (ind2 > 0 && j == B[ind2] - '0')
        nind2--;
      else
        toAdd++;
      if (ind3 > 0 && k == C[ind3] - '0')
        nind3--;
      else
        toAdd++;
      ret = min(ret, solve(nind1, nind2, nind3, (i ? 0 : (l1 + 1)),
                           (j ? 0 : (l2 + 1)), (k ? 0 : (l3 + 1)), ncarry) +
                         toAdd);
    }
  }
  return best[ind1][ind2][ind3][l1][l2][l3][carry] = ret;
}
void solve2(int ind1, int ind2, int ind3, int l1, int l2, int l3, bool carry) {
  if (ind1 == 0 && ind2 == 0 && ind3 == 0) {
    if (carry) ret3 += '1';
    return;
  }
  int i, j, k, cur = best[ind1][ind2][ind3][l1][l2][l3][carry];
  if (ind1 > 0) {
    i = A[ind1] - '0';
    for (j = 0; j < 10; j++) {
      k = (i + j + carry) % 10;
      int toAdd = 0, nind1 = ind1, nind2 = ind2, nind3 = ind3,
          ncarry = (i + j + carry > 9);
      if (ind1 > 0 && i == A[ind1] - '0')
        nind1--;
      else
        toAdd++;
      if (ind2 > 0 && j == B[ind2] - '0')
        nind2--;
      else
        toAdd++;
      if (ind3 > 0 && k == C[ind3] - '0')
        nind3--;
      else
        toAdd++;
      if (solve(nind1, nind2, nind3, i ? 0 : (l1 + 1), j ? 0 : (l2 + 1),
                k ? 0 : (l3 + 1), ncarry) +
              toAdd ==
          cur) {
        ret1 += char(i + '0');
        ret2 += char(j + '0');
        ret3 += char(k + '0');
        solve2(nind1, nind2, nind3, (i ? 0 : (l1 + 1)), (j ? 0 : (l2 + 1)),
               (k ? 0 : (l3 + 1)), ncarry);
        return;
      }
    }
  }
  if (ind2 > 0) {
    j = B[ind2] - '0';
    for (i = 0; i < 10; i++) {
      k = (i + j + carry) % 10;
      int toAdd = 0, nind1 = ind1, nind2 = ind2, nind3 = ind3,
          ncarry = (i + j + carry > 9);
      if (ind1 > 0 && i == A[ind1] - '0')
        nind1--;
      else
        toAdd++;
      if (ind2 > 0 && j == B[ind2] - '0')
        nind2--;
      else
        toAdd++;
      if (ind3 > 0 && k == C[ind3] - '0')
        nind3--;
      else
        toAdd++;
      if (solve(nind1, nind2, nind3, i ? 0 : (l1 + 1), j ? 0 : (l2 + 1),
                k ? 0 : (l3 + 1), ncarry) +
              toAdd ==
          cur) {
        ret1 += char(i + '0');
        ret2 += char(j + '0');
        ret3 += char(k + '0');
        solve2(nind1, nind2, nind3, (i ? 0 : (l1 + 1)), (j ? 0 : (l2 + 1)),
               (k ? 0 : (l3 + 1)), ncarry);
        return;
      }
    }
  }
  if (ind3 > 0) {
    k = C[ind3] - '0';
    for (i = 0; i < 10; i++) {
      j = (k - i - carry + 10) % 10;
      int toAdd = 0, nind1 = ind1, nind2 = ind2, nind3 = ind3,
          ncarry = (i + j + carry > 9);
      if (ind1 > 0 && i == A[ind1] - '0')
        nind1--;
      else
        toAdd++;
      if (ind2 > 0 && j == B[ind2] - '0')
        nind2--;
      else
        toAdd++;
      if (ind3 > 0 && k == C[ind3] - '0')
        nind3--;
      else
        toAdd++;
      if (solve(nind1, nind2, nind3, i ? 0 : (l1 + 1), j ? 0 : (l2 + 1),
                k ? 0 : (l3 + 1), ncarry) +
              toAdd ==
          cur) {
        ret1 += char(i + '0');
        ret2 += char(j + '0');
        ret3 += char(k + '0');
        solve2(nind1, nind2, nind3, (i ? 0 : (l1 + 1)), (j ? 0 : (l2 + 1)),
               (k ? 0 : (l3 + 1)), ncarry);
        return;
      }
    }
  }
}
string removeLeadingZeros(string x) {
  for (int i = 0; i < (int)x.size(); i++)
    if (x[i] != '0') return x.substr(i);
  return x;
}
int main() {
  memset(best, -1, sizeof best);
  scanf("%d+%d=%d", &a, &b, &c);
  sprintf(A, "#%d", a);
  sprintf(B, "#%d", b);
  sprintf(C, "#%d", c);
  solve(strlen(A) - 1, strlen(B) - 1, strlen(C) - 1, 0, 0, 0, 0);
  solve2(strlen(A) - 1, strlen(B) - 1, strlen(C) - 1, 0, 0, 0, 0);
  reverse(ret1.begin(), ret1.end());
  reverse(ret2.begin(), ret2.end());
  reverse(ret3.begin(), ret3.end());
  ret1 = removeLeadingZeros(ret1);
  ret2 = removeLeadingZeros(ret2);
  ret3 = removeLeadingZeros(ret3);
  printf("%s+%s=%s\n", ret1.c_str(), ret2.c_str(), ret3.c_str());
}
