← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func counts(start byte, m int) (int, int) {
	if start == '4' {
		return (m + 1) / 2, m / 2
	}
	return m / 2, (m + 1) / 2
}

func feasible(a1, a2 int, start byte, m int) bool {
	r4, r7 := counts(start, m)
	if r4 == 0 {
		if a1 != 0 {
			return false
		}
	} else if a1 < r4 {
		return false
	}
	if r7 == 0 {
		if a2 != 0 {
			return false
		}
	} else if a2 < r7 {
		return false
	}
	return true
}

func build(a1, a2 int, start byte, m int) []byte {
	r4, r7 := counts(start, m)
	rem4, rem7 := a1, a2
	res := make([]byte, 0, a1+a2)
	d := start
	for i := 0; i < m; i++ {
		if d == '4' {
			l := rem4 - (r4 - 1)
			for j := 0; j < l; j++ {
				res = append(res, '4')
			}
			rem4 -= l
			r4--
			d = '7'
		} else {
			l := 1
			if r7 == 1 {
				l = rem7
			}
			for j := 0; j < l; j++ {
				res = append(res, '7')
			}
			rem7 -= l
			r7--
			d = '4'
		}
	}
	return res
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var a1, a2, a3, a4 int
	if _, err := fmt.Fscan(in, &a1, &a2, &a3, &a4); err != nil {
		return
	}

	if a3-a4 > 1 || a4-a3 > 1 {
		out.WriteString("-1")
		return
	}

	if a3 == a4 {
		m := 2*a3 + 1
		if feasible(a1, a2, '4', m) {
			out.Write(build(a1, a2, '4', m))
		} else if feasible(a1, a2, '7', m) {
			out.Write(build(a1, a2, '7', m))
		} else {
			out.WriteString("-1")
		}
		return
	}

	if a3 == a4+1 {
		m := 2 * a3
		if feasible(a1, a2, '4', m) {
			out.Write(build(a1, a2, '4', m))
		} else {
			out.WriteString("-1")
		}
		return
	}

	m := 2 * a4
	if feasible(a1, a2, '7', m) {
		out.Write(build(a1, a2, '7', m))
	} else {
		out.WriteString("-1")
	}
}