#include <bits/stdc++.h>
using namespace std;
struct num {
  static const __int128 MA = 1e15 + 19, MB = 1e15 + 3;
  __int128 a, b;
  num() {}
  num(long long x) : a(x), b(x) {}
  num(long long a, long long b) : a(a), b(b) {}
  num operator+(const num &x) const {
    return num((a + x.a) % MA, (b + x.b) % MB);
  }
  num operator-(const num &x) const {
    return num((a + MA - x.a) % MA, (b + MB - x.b) % MB);
  }
  num operator*(long long x) const {
    return num(((__int128)a * (__int128)x) % MA,
               ((__int128)b * (__int128)x) % MB);
  }
  num operator*(const num &x) const {
    return num(((__int128)a * (__int128)x.a) % MA,
               ((__int128)b * (__int128)x.b) % MB);
  }
  bool operator==(const num &x) const { return a == x.a && b == x.b; }
  explicit operator __int128() const { return (__int128)a * MB + b + 1; }
};
template <class hash_t>
struct StrComparator {
  static const long long P;
  static vector<hash_t> deg;
  long long n;
  const string s;
  hash_t *h;
  StrComparator(long long n, const string s) : n(n), s(s) {
    h = new hash_t[n + 1];
    h[0] = 0;
    for (long long i = 0; i < n; i++) {
      h[i + 1] = h[i] * P + s[i] - '0';
    }
    deg.reserve(n);
    while ((long long)deg.size() <= n) deg.push_back(*deg.rbegin() * P);
  }
  hash_t substr(long long i, long long len) const {
    return h[i + len] - h[i] * deg[len];
  }
  long long lcp(long long i, long long j) {
    long long L = 0, R = n - max(i, j);
    while (L < R) {
      long long M = (L + R + 1) / 2;
      if (substr(i, M) == substr(j, M))
        L = M;
      else
        R = M - 1;
    }
    return L;
  }
  long long cmp(long long a, long long b) {
    long long LEN = n - max(a, b), L = lcp(a, b);
    return L < LEN ? (long long)s[a + L] - s[b + L] : b - a;
  }
  bool operator()(long long i, long long j) { return cmp(i, j) < 0; }
};
template <class hash_t>
vector<hash_t> StrComparator<hash_t>::deg(1, hash_t(1));
template <class hash_t>
const long long StrComparator<hash_t>::P = 10;
void solve() {
  string s;
  cin >> s;
  long long n = s.size();
  StrComparator<num> h(n, s);
  auto check = [&](long long len1, long long len2) -> void {
    if (len1 <= 0 || len2 <= 0 || len1 + len2 >= n) return;
    long long i = len1 - 1;
    long long j = len1 + len2 - 1;
    long long len3 = n - len1 - len2;
    if ((s[0] == '0' && len1 != 1) || (s[i + 1] == '0' && len2 != 1) ||
        (s[j + 1] == '0' && len3 != 1))
      return;
    if (h.substr(0, len1) + h.substr(i + 1, len2) ==
        h.substr(j + 1, n - len1 - len2)) {
      for (long long q = 0; q <= i; q++) cout << s[q];
      cout << '+';
      for (long long q = i + 1; q <= j; q++) cout << s[q];
      cout << '=';
      for (long long q = j + 1; q < n; q++) cout << s[q];
      exit(0);
    }
  };
  const long long C = 6;
  for (long long i = 0; i < n; i++) {
    long long len1 = i + 1;
    long long len23 = n - len1;
    long long len2 = len23 - len1;
    for (long long i = max(1LL, len2 - C); i <= len2 + C; i++) check(len1, i);
    len2 = len23 / 2;
    for (long long i = max(1LL, len2 - C); i <= len2 + C; i++) check(len1, i);
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  solve();
  return 0;
}
