#include <bits/stdc++.h>
using namespace std;
int L(long long t) {
  if (0 <= t && t <= 9) return 1;
  return L(t / 10) + 1;
}
struct E {
  long long x, y, z;
  bool operator<(const E &p) const {
    return L(x) + L(y) + L(z) < L(p.x) + L(p.y) + L(p.z);
  }
} res;
const long long inf = 1e15;
map<tuple<long long, long long, long long, long long>, E> D;
E go(long long a, long long b, long long c, long long d) {
  int sw = (a > b);
  if (sw) swap(a, b);
  E ret = {inf, inf, inf}, tmp;
  tuple<long long, long long, long long, long long> now = {a, b, c, d};
  if (D.count(now))
    ret = D[now];
  else {
    if (!a && !b && !c && !d) return D[now] = {0, 0, 0};
    if ((a + b + d) % 10 == c % 10) {
      ret = go(a / 10, b / 10, c / 10, (a % 10 + b % 10 + d) / 10);
      ret.x = ret.x * 10 + a % 10;
      ret.y = ret.y * 10 + b % 10;
      ret.z = ret.z * 10 + c % 10;
    } else {
      if (a || b || d) {
        int t = (a + b + d) % 10;
        tmp = go(a / 10, b / 10, c, (a % 10 + b % 10 + d) / 10);
        tmp.x = tmp.x * 10 + a % 10;
        tmp.y = tmp.y * 10 + b % 10;
        tmp.z = tmp.z * 10 + t;
        ret = min(ret, tmp);
      }
      if (a || c) {
        int t = (20 + c - d - a % 10) % 10;
        tmp = go(a / 10, b, c / 10, (a % 10 + t + d) / 10);
        tmp.x = tmp.x * 10 + a % 10;
        tmp.y = tmp.y * 10 + t;
        tmp.z = tmp.z * 10 + c % 10;
        ret = min(ret, tmp);
      }
      if (b || c) {
        int t = (20 + c - d - b % 10) % 10;
        tmp = go(a, b / 10, c / 10, (b % 10 + t + d) / 10);
        tmp.x = tmp.x * 10 + t;
        tmp.y = tmp.y * 10 + b % 10;
        tmp.z = tmp.z * 10 + c % 10;
        ret = min(ret, tmp);
      }
    }
    D[now] = ret;
  }
  if (sw) swap(ret.x, ret.y);
  return ret;
}
int main() {
  int a, b, c;
  scanf("%d+%d=%d", &a, &b, &c);
  res = go(a, b, c, 0);
  printf("%lld+%lld=%lld", res.x, res.y, res.z);
}
