#include <bits/stdc++.h>
using namespace std;
int Len(long long a) {
  int len = 0;
  while (a) len++, a /= 10;
  return len;
}
struct Triple {
  long long x, y, z;
  bool operator<(const Triple &other) const {
    return Len(x) + Len(y) + Len(z) <
           Len(other.x) + Len(other.y) + Len(other.z);
  }
};
const int MAXTEN = 18;
Triple ans;
int anslen;
long long ten[MAXTEN];
void Update(long long a, long long b, long long c) {
  int len = Len(a) + Len(b) + Len(c);
  if (len < anslen) anslen = len, ans.x = a, ans.y = b, ans.z = c;
  return;
}
Triple DFS(long long a, long long b, long long c, int p, long long prea,
           long long preb, long long prec, int k) {
  int len0 = Len(a) + Len(b) + Len(c) + Len(prea) + Len(preb) + Len(prec);
  Triple ret, tem;
  ret.x = ret.y = ret.z = LLONG_MAX;
  if (len0 >= anslen) return ret;
  if (a == 0 && b == 0 && c == 0 && p == 0) {
    ret.x = ret.y = ret.z = 0;
    Update(prea, preb, prec);
    return ret;
  } else if (a == 0 && b == 0 && c == 0 && p > 0) {
    ret.x = ret.y = 0;
    ret.z = 1;
    Update(prea, preb, prec + ten[k]);
    return ret;
  } else if ((a + b + p) % 10 == c % 10) {
    ret = DFS(a / 10, b / 10, c / 10, (a % 10 + b % 10 + p) / 10,
              prea + ten[k] * (a % 10), preb + ten[k] * (b % 10),
              prec + ten[k] * (c % 10), k + 1);
    if (ret.x != LLONG_MAX)
      ret.x = ret.x * 10 + a % 10, ret.y = ret.y * 10 + b % 10,
      ret.z = ret.z * 10 + c % 10;
    return ret;
  }
  if (a > 0 || b > 0) {
    tem = DFS(a / 10, b / 10, c, (a % 10 + b % 10 + p) / 10,
              prea + ten[k] * (a % 10), preb + ten[k] * (b % 10),
              prec + ten[k] * ((a % 10 + b % 10 + p) % 10), k + 1);
    if (tem < ret)
      ret = tem, ret.x = ret.x * 10 + a % 10, ret.y = ret.y * 10 + b % 10,
      ret.z = ret.z * 10 + (a % 10 + b % 10 + p) % 10;
  }
  if (a > 0 || c > 0) {
    tem = DFS(a / 10, b, c / 10, c % 10 - a % 10 - p < 0,
              prea + ten[k] * (a % 10),
              preb + ten[k] * ((c % 10 - a % 10 - p + 10) % 10),
              prec + ten[k] * (c % 10), k + 1);
    if (tem < ret)
      ret = tem, ret.x = ret.x * 10 + a % 10,
      ret.y = ret.y * 10 + (c % 10 - a % 10 - p + 10) % 10,
      ret.z = ret.z * 10 + c % 10;
  }
  if (b > 0 || c > 0) {
    tem = DFS(a, b / 10, c / 10, c % 10 - b % 10 - p < 0,
              prea + ten[k] * ((c % 10 - b % 10 - p + 10) % 10),
              preb + ten[k] * (b % 10), prec + ten[k] * (c % 10), k + 1);
    if (tem < ret)
      ret = tem, ret.x = ret.x * 10 + (c % 10 - b % 10 - p + 10) % 10,
      ret.y = ret.y * 10 + b % 10, ret.z = ret.z * 10 + c % 10;
  }
  return ret;
}
int main() {
  long long a, b, c;
  ten[0] = 1;
  for (int i = 1; i < MAXTEN; i++) ten[i] = ten[i - 1] * 10;
  anslen = INT_MAX;
  scanf("%I64d+%I64d=%I64d", &a, &b, &c);
  DFS(a, b, c, 0, 0, 0, 0, 0);
  printf("%I64d+%I64d=%I64d\n", ans.x, ans.y, ans.z);
  return 0;
}
