#include <bits/stdc++.h>
#pragma GCC optimize("O500")
#pragma comment(linker, "/STACK:1677777216")
#pragma warning(default : 4)
using namespace std;
const double eps = 1e-12;
const int oo = 0x3F3F3F3F;
const long long ooLL = 0x3F3F3F3F3F3F3F3FLL;
const int MOD = 1000000007;
template <typename T>
T sqr(T x) {
  return x * x;
}
template <typename T>
void debpr(const T &);
template <typename T1, typename T2>
void debpr(const pair<T1, T2> &);
template <typename T1, typename T2>
void debpr(const vector<T1, T2> &);
template <typename T>
void debpr(const set<T> &);
template <typename T1, typename T2>
void debpr(const map<T1, T2> &);
template <typename T>
void prcont(T be, T en, const string &st, const string &fi, const string &mi) {
  debpr(st);
  bool ft = 0;
  while (be != en) {
    if (ft) debpr(mi);
    ft = 1;
    debpr(*be);
    ++be;
  }
  debpr(fi);
}
template <typename T>
void debpr(const T &a) {}
template <typename T1, typename T2>
void debpr(const pair<T1, T2> &p) {
  debpr("(");
  debpr(p.first);
  debpr(", ");
  debpr(p.second);
  debpr(")");
}
template <typename T1, typename T2>
void debpr(const vector<T1, T2> &a) {
  prcont(a.begin(), a.end(), "[", "]", ", ");
}
template <typename T>
void debpr(const set<T> &a) {
  prcont(a.begin(), a.end(), "{", "}", ", ");
}
template <typename T1, typename T2>
void debpr(const map<T1, T2> &a) {
  prcont(a.begin(), a.end(), "{", "}", ", ");
}
void deb(){};
template <typename T1>
void deb(const T1 &t1) {
  debpr(t1);
  debpr('\n');
}
template <typename T1, typename T2>
void deb(const T1 &t1, const T2 &t2) {
  debpr(t1);
  debpr(' ');
  debpr(t2);
  debpr('\n');
}
template <typename T1, typename T2, typename T3>
void deb(const T1 &t1, const T2 &t2, const T3 &t3) {
  debpr(t1);
  debpr(' ');
  debpr(t2);
  debpr(' ');
  debpr(t3);
  debpr('\n');
}
template <typename T1, typename T2, typename T3, typename T4>
void deb(const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4) {
  debpr(t1);
  debpr(' ');
  debpr(t2);
  debpr(' ');
  debpr(t3);
  debpr(' ');
  debpr(t4);
  debpr('\n');
}
const double PI = acos(-1.);
long long Round(double x) { return x < 0 ? x - .5 : x + .5; }
template <typename T>
void ass(bool v, const T &x, string m = "Fail") {
  if (!v) {
    deb(m);
    deb(x);
    throw;
  }
}
int main() {
  void run();
  run();
  return 0;
}
char s[1 << 21];
int a1, a2, a3, a4;
bool go(bool re) {
  int b1, b2, p = 0;
  if (a3 == a4)
    b1 = a1 - a3 - 1, b2 = a2 - a3;
  else if (a3 == a4 + 1)
    b1 = a1 - a3, b2 = a2 - a3;
  else
    return 0;
  if (b1 < 0 || b2 < 0) return 0;
  if (a3 == 0) {
    if (a1 && a2) return 0;
    for (int i = (0), _b(a1); i < _b; ++i) s[p++] = '4', --a1;
    for (int i = (0), _b(a2); i < _b; ++i) s[p++] = '7', --a2;
  }
  while (a3) {
    static int ft = 0;
    int c1, c2;
    if (re) {
      c1 = a3 == 1 ? b1 : 0;
      c2 = ft ? 0 : b2;
    } else {
      c1 = ft ? 0 : b1;
      c2 = a3 == 1 ? b2 : 0;
    }
    --a3;
    if (ft) --a4;
    ft = 1;
    if (re && !a3 && a4) c1 = 0;
    for (int it = (0), _b(1 + c1); it < _b; ++it) s[p++] = '4', --a1;
    for (int it = (0), _b(1 + c2); it < _b; ++it) s[p++] = '7', --a2;
  }
  if (a4) {
    a4 -= bool(a1);
    while (a1) s[p++] = '4', --a1;
  }
  if (a1 || a2 || a3 || a4) return 0;
  return 1;
}
void run() {
  scanf("%d %d %d %d", &a1, &a2, &a3, &a4);
  vector<string> rs;
  if (go(0)) rs.push_back(s);
  swap(a1, a2);
  swap(a3, a4);
  if (go(1)) {
    for (int i = (0), _b(strlen(s)); i < _b; ++i)
      s[i] = s[i] == '4' ? '7' : '4';
    rs.push_back(s);
  }
  sort((rs).rbegin(), (rs).rend());
  rs.push_back("-1");
  puts(rs[0].c_str());
}
