#include <bits/stdc++.h>
template <class _T>
bool maximize(_T &a, _T b) {
  return a < b ? a = b, 1 : 0;
}
template <class _T>
bool minimize(_T &a, _T b) {
  return a > b ? a = b, 1 : 0;
}
const int ooit = 2e9;
const long long ooll = 1e15;
using namespace std;
int v1, v2, v3, vm;
void enter() { cin >> v1 >> v2 >> v3 >> vm; }
bool check() {
  if (max(v1, vm) > 2 * v1) return false;
  if (max(v2, vm) > 2 * v2) return false;
  if (max(vm, v3) > min(2 * vm, 2 * v3)) return false;
  return true;
}
void process() {
  if (!check())
    cout << -1;
  else {
    int car1 = 2 * v1, car2 = -1, car3 = -1;
    for (int i = car1 - 1; i >= max(vm, v2); i--)
      if (i >= max(vm, v2) && i <= 2 * v2) {
        car2 = i;
        break;
      }
    if (car2 == -1) {
      cout << -1;
      return;
    }
    for (int i = car2 - 1; i >= max(vm, v3); i--)
      if (i >= max(vm, v3) && i <= min(2 * vm, 2 * v3)) {
        car3 = i;
        break;
      }
    if (car3 == -1) {
      cout << -1;
      return;
    }
    if (2 * vm >= car1) {
      cout << -1;
      return;
    }
    if (2 * vm >= car2) {
      cout << -1;
      return;
    }
    cout << car1 << endl << car2 << endl << car3;
  }
}
int main() {
  enter();
  process();
  return 0;
}
