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")
}
}