#include <bits/stdc++.h>
using namespace std;
const int N = 20, INF = 100000;
int a[N], b[N], c[N], na, nb, nc;
int dp[N][N][N][2][N][N], pred[N][N][N][2][N][N];
pair<bool, bool> put[N][N][N][2][N][N];
vector<int> fir, sec, thr;
inline int solve(int x, int y, int z, bool prev, int dx, int dy) {
  if (!x && !y && !z) {
    put[x][y][z][prev][dx][dy] = pair<bool, bool>(0, 0);
    return prev;
  }
  int res = dp[x][y][z][prev][dx][dy];
  if (res < INF) return res;
  int isa, isb, isc, cur, ndx, ndy;
  for (int k, i = 0; i < 10; i++)
    for (int j = 0; j < 10; j++) {
      k = (i + j + prev) % 10;
      isa = (i == a[x]);
      isb = (j == b[y]);
      isc = (k == c[z]);
      if (!isa && !isb && !isc) continue;
      ndx = i ? 0 : dx + 1;
      ndy = j ? 0 : dy + 1;
      cur = solve(x - isa, y - isb, z - isc, i + j + prev > 9, ndx, ndy);
      bool xx =
          put[x - isa][y - isb][z - isc][i + j + prev > 9][ndx][ndy].first;
      bool yy =
          put[x - isa][y - isb][z - isc][i + j + prev > 9][ndx][ndy].second;
      if (i) cur += dx + 1;
      if (j) cur += dy + 1;
      if (cur + 1 < res) {
        res = cur + 1;
        pred[x][y][z][prev][dx][dy] = 10 * i + j;
        put[x][y][z][prev][dx][dy] =
            pair<bool, bool>(i || xx || x, j || yy || y);
      }
    }
  return dp[x][y][z][prev][dx][dy] = res;
}
inline void get(int x, int y, int z, bool prev, int dx, int dy) {
  if (!x && !y && !z) {
    if (prev) thr.push_back(prev);
    return;
  }
  int i = pred[x][y][z][prev][dx][dy] / 10;
  int j = pred[x][y][z][prev][dx][dy] % 10;
  int k = (i + j + prev) % 10;
  int ndx = i ? 0 : dx + 1;
  int ndy = j ? 0 : dy + 1;
  get(x - (i == a[x]), y - (j == b[y]), z - (k == c[z]), i + j + prev > 9, ndx,
      ndy);
  fir.push_back(i);
  sec.push_back(j);
  thr.push_back(k);
}
int main() {
  int r, s, q;
  scanf("%d+%d=%d", &r, &s, &q);
  memset(a, -1, sizeof a);
  memset(b, -1, sizeof b);
  memset(c, -1, sizeof c);
  na = 0;
  while (r) {
    a[++na] = r % 10;
    r /= 10;
  }
  nb = 0;
  while (s) {
    b[++nb] = s % 10;
    s /= 10;
  }
  nc = 0;
  while (q) {
    c[++nc] = q % 10;
    q /= 10;
  }
  reverse(a + 1, a + na + 1);
  reverse(b + 1, b + nb + 1);
  reverse(c + 1, c + nc + 1);
  a[0] = b[0] = c[0] = -1;
  fill((int*)dp, (int*)dp + N * N * N * 2 * N * N, INF);
  int res = solve(na, nb, nc, 0, 0, 0);
  get(na, nb, nc, 0, 0, 0);
  int i;
  for (i = 0; !fir[i]; i++)
    ;
  for (; i < (int)fir.size(); i++) printf("%d", fir[i]);
  printf("+");
  for (i = 0; !sec[i]; i++)
    ;
  for (; i < (int)sec.size(); i++) printf("%d", sec[i]);
  printf("=");
  for (i = 0; !thr[i]; i++)
    ;
  for (; i < (int)thr.size(); i++) printf("%d", thr[i]);
  printf("\n");
  return 0;
}
