← Home
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')
	}
}