#include <bits/stdc++.h>
using namespace std;
int fact[100005];
int invfact[100005];
bool prime[100005];
vector<long long> divisor[100005];
long long pw(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1ll) {
      res = res * a % 1000000007;
    }
    b >>= 1;
    a = a * a % 1000000007;
  }
  return res;
}
void CombiPre() {
  fact[0] = 1;
  for (int i = 1; i < 100005; ++i) {
    fact[i] = 1ll * i * fact[i - 1] % 1000000007;
  }
  invfact[100005 - 1] = pw(fact[100005 - 1], 1000000007 - 2);
  for (int i = 100005 - 2; i >= 0; --i) {
    invfact[i] = 1ll * invfact[i + 1] * (i + 1) % 1000000007;
  }
}
long long C(int n, int k) {
  return fact[n] * 1ll * invfact[n - k] % 1000000007 * invfact[k] % 1000000007;
}
void primePre() {
  prime[1] = 1;
  prime[0] = 1;
  for (long long i = 2; i * i <= 100005; i++) {
    for (long long j = i + i; j <= 100005; j += i) {
      prime[j] = 1;
    }
  }
}
bool like(int x, int y) {
  if (2 * x >= y)
    return true;
  else
    return false;
}
bool climb(int x, int y) {
  if (x <= y) return true;
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int v1, v2, v3, vm;
  cin >> v1 >> v2 >> v3 >> vm;
  for (int i = (1); i <= (400); ++i) {
    for (int j = (i + 1); j <= (400); ++j) {
      for (int k = (j + 1); k <= (400); ++k) {
        bool b1, b2, b3, b4, b5, b6, b7, b8;
        b1 = climb(v1, k);
        b2 = climb(v2, j);
        b3 = climb(v3, i);
        b4 = like(v1, k);
        b5 = like(v2, j);
        b6 = like(v3, i);
        b7 = climb(vm, i) && climb(vm, j) && climb(vm, k);
        b8 = like(vm, i) && !like(vm, j) && !like(vm, k);
        if (b1 && b2 && b3 && b4 && b5 && b6 && b7 && b8) {
          cout << k << endl << j << endl << i << endl;
          return 0;
        }
      }
    }
  }
  cout << -1 << endl;
  return 0;
}
