#include <bits/stdc++.h>
using namespace std;
string s;
struct SingleHash {
  vector<int> pre, b, inv_b;
  int mod, n;
  int add(int a, int b) { return (a + b) % mod; }
  int mult(int a, int b) {
    long long c = a, d = b;
    return (c * d) % mod;
  }
  int inv(int b) {
    int e = mod - 2;
    int res = 1;
    while (e) {
      if (e & 1) res = mult(res, b);
      e >>= 1;
      b = mult(b, b);
    }
    return res;
  }
  SingleHash(string s, int _mod, int base = 10) {
    n = s.length();
    pre.assign(n + 1, 0);
    b.assign(n + 1, 0);
    inv_b.assign(n + 1, 0);
    b[0] = 1;
    b[1] = base;
    mod = _mod;
    for (int i = 0; i < ((int)(s).size()); ++i) s[i] -= '0';
    pre[0] = s[0];
    for (int i = 1; i < n; ++i) {
      pre[i] = (s[i] + (long long)pre[i - 1] * b[1]) % mod;
    }
    inv_b[0] = 1;
    inv_b[1] = inv(base);
    for (int i = 2; i <= n; ++i) {
      b[i] = (long long)b[i - 1] * b[1] % mod;
      inv_b[i] = inv(b[i]);
    }
  }
  int substr(int l, int r) const {
    int dim = 0;
    if (l) dim = pre[l - 1];
    long long v = 1ll * pre[r] - dim * (long long)b[r - l + 1];
    v %= mod;
    v += mod;
    v %= mod;
    return v;
  }
  bool is_ok(int plus_l, int equal_l) {
    if (plus_l >= equal_l) return false;
    int sz1 = plus_l, sz2 = equal_l - plus_l + 1, sz3 = n - equal_l;
    if (sz1 <= 0 || sz2 <= 0 || sz3 <= 0) return false;
    if (add(substr(0, plus_l - 1), substr(plus_l, equal_l - 1)) ==
        substr(equal_l, n - 1))
      return true;
    return false;
  }
};
void show(int plus_l, int equal_l) {
  string ans;
  for (int i = 0; i < plus_l; ++i) ans += s[i];
  ans += "+";
  for (int i = plus_l; i < equal_l; ++i) ans += s[i];
  ans += "=";
  for (int i = equal_l; i < ((int)(s).size()); ++i) ans += s[i];
  cout << ans << endl;
}
bool leading_zeroes(int plus_l, int equal_l) {
  int sz1 = plus_l, sz2 = equal_l - plus_l, sz3 = ((int)(s).size()) - equal_l;
  return (sz1 > 1 && s[0] == '0') || (sz2 > 1 && s[plus_l] == '0') ||
         (sz3 > 1 && s[equal_l] == 0);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> s;
  SingleHash hs1(s, 1000000009), hs2(s, 1000000007);
  for (int i = 1; i < ((int)(s).size()) - 1; ++i) {
    int ans_t = ((int)(s).size()) - max(i, (((int)(s).size()) - i) / 2);
    for (int j = ans_t - 10; j <= ans_t + 10; ++j) {
      if (hs1.is_ok(i, j) && hs2.is_ok(i, j) && !leading_zeroes(i, j)) {
        show(i, j);
        return 0;
      }
    }
  }
  return 0;
}
