package main
import (
"bufio"
"io"
"os"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
next := func() []byte {
for idx < len(data) {
c := data[idx]
if c != ' ' && c != '\n' && c != '\r' && c != '\t' {
break
}
idx++
}
start := idx
for idx < len(data) {
c := data[idx]
if c == ' ' || c == '\n' || c == '\r' || c == '\t' {
break
}
idx++
}
return data[start:idx]
}
parseInt := func(b []byte) int {
x := 0
for _, c := range b {
x = x*10 + int(c-'0')
}
return x
}
s := next()
a := parseInt(next())
b := parseInt(next())
n := len(s)
pref := make([]bool, n)
rem := 0
for i := 0; i < n; i++ {
rem = (rem*10 + int(s[i]-'0')) % a
if rem == 0 {
pref[i] = true
}
}
suf := make([]bool, n)
rem = 0
pow := 1 % b
for i := n - 1; i >= 0; i-- {
rem = (int(s[i]-'0')*pow + rem) % b
if rem == 0 && s[i] != '0' {
suf[i] = true
}
pow = (pow * 10) % b
}
cut := -1
for i := 0; i < n-1; i++ {
if pref[i] && suf[i+1] {
cut = i + 1
break
}
}
w := bufio.NewWriterSize(os.Stdout, 1<<20)
defer w.Flush()
if cut == -1 {
w.WriteString("NO\n")
} else {
w.WriteString("YES\n")
w.Write(s[:cut])
w.WriteByte('\n')
w.Write(s[cut:])
w.WriteByte('\n')
}
}