#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3fffffff;
int a[2], b[2], ans, aa[2], bb[2];
map<long long, int> mpn;
map<long long, pair<int, int> > mps;
map<pair<int, int>, int> mpt;
inline void bfs1() {
  queue<int> q;
  q.push(a[0]), q.push(b[0]), q.push(0);
  mpn[(long long)a[0] * (long long)b[0]] = 0;
  mps[(long long)a[0] * (long long)b[0]] = pair<int, int>(a[0], b[0]);
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    int y = q.front();
    q.pop();
    int c = q.front();
    q.pop();
    long long xx, yy, cc = c + 1;
    long long sz;
    if (x > 1 && (x & 1) == 0) {
      xx = x / 2, yy = y, sz = xx * yy;
      if (mpn.count(sz) == 0 || mpn[sz] > cc) {
        mpn[sz] = cc;
        mps[sz] = pair<int, int>((int)xx, (int)yy);
        q.push((int)xx), q.push((int)yy), q.push(int(cc));
      }
    }
    if (y > 1 && (y & 1) == 0) {
      xx = x, yy = y / 2, sz = xx * yy;
      if (mpn.count(sz) == 0 || mpn[sz] > cc) {
        mpn[sz] = cc;
        mps[sz] = pair<int, int>((int)xx, (int)yy);
        q.push((int)xx), q.push((int)yy), q.push(int(cc));
      }
    }
    if (x > 1 && x % 3 == 0) {
      xx = x / 3 * 2, yy = y, sz = xx * yy;
      if (mpn.count(sz) == 0 || mpn[sz] > cc) {
        mpn[sz] = cc;
        mps[sz] = pair<int, int>((int)xx, (int)yy);
        q.push((int)xx), q.push((int)yy), q.push(int(cc));
      }
    }
    if (y > 1 && y % 3 == 0) {
      xx = x, yy = y / 3 * 2, sz = xx * yy;
      if (mpn.count(sz) == 0 || mpn[sz] > cc) {
        mpn[sz] = cc;
        mps[sz] = pair<int, int>((int)xx, (int)yy);
        q.push((int)xx), q.push((int)yy), q.push(int(cc));
      }
    }
  }
}
inline void bfs2() {
  queue<int> q;
  q.push(a[1]), q.push(b[1]), q.push(0);
  mpt[pair<int, int>(a[1], b[1])] = 0;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    int y = q.front();
    q.pop();
    int c = q.front();
    q.pop();
    long long xx, yy, cc = c + 1;
    long long sz = (long long)x * (long long)y;
    if (mpn.count(sz) && mpn[sz] + c < ans) {
      ans = mpn[sz] + c;
      aa[0] = mps[sz].first;
      bb[0] = mps[sz].second;
      aa[1] = x, bb[1] = y;
    }
    pair<int, int> p;
    if (x > 1 && (x & 1) == 0) {
      xx = x / 2, yy = y, sz = xx * yy;
      p = pair<int, int>(xx, yy);
      if (mpt.count(p) == 0 || mpt[p] > cc) {
        q.push((int)xx), q.push((int)yy), q.push(int(cc));
        mpt[pair<int, int>((int)xx, (int)yy)] = cc;
      }
    }
    if (y > 1 && (y & 1) == 0) {
      xx = x, yy = y / 2, sz = xx * yy;
      p = pair<int, int>(xx, yy);
      if (mpt.count(p) == 0 || mpt[p] > cc) {
        q.push((int)xx), q.push((int)yy), q.push(int(cc));
        mpt[pair<int, int>((int)xx, (int)yy)] = cc;
      }
    }
    if (x > 1 && x % 3 == 0) {
      xx = x / 3 * 2, yy = y, sz = xx * yy;
      p = pair<int, int>(xx, yy);
      if (mpt.count(p) == 0 || mpt[p] > cc) {
        q.push((int)xx), q.push((int)yy), q.push(int(cc));
        mpt[pair<int, int>((int)xx, (int)yy)] = cc;
      }
    }
    if (y > 1 && y % 3 == 0) {
      xx = x, yy = y / 3 * 2, sz = xx * yy;
      p = pair<int, int>(xx, yy);
      if (mpt.count(p) == 0 || mpt[p] > cc) {
        q.push((int)xx), q.push((int)yy), q.push(int(cc));
        mpt[pair<int, int>((int)xx, (int)yy)] = cc;
      }
    }
  }
}
int main(int argc, char *argv[]) {
  cin >> a[0] >> b[0];
  cin >> a[1] >> b[1];
  ans = inf;
  bfs1();
  bfs2();
  if (ans == inf)
    puts("-1");
  else {
    printf("%d\n", ans);
    printf("%d %d\n", aa[0], bb[0]);
    printf("%d %d\n", aa[1], bb[1]);
  }
  return 0;
}
