← Home
```go
package main

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

type Step struct {
	f int
	s string
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n, m int
	var k int64
	fmt.Fscan(in, &n, &m, &k)

	maxEdges := int64(4*n*m - 2*n - 2*m)
	if k > maxEdges {
		fmt.Println("NO")
		return
	}
	fmt.Println("YES")

	var steps []Step
	remaining := int(k)

	if n == 1 && m == 1 {
		// k must be 0, but k>=1, so handled by maxEdges check (0)
	} else if n == 1 {
		// Only horizontal
		take := min(remaining, m-1)
		if take > 0 {
			steps = append(steps, Step{take, "R"})
			remaining -= take
		}
		if remaining > 0 {
			steps = append(steps, Step{remaining, "L"})
			remaining = 0
		}
	} else if m == 1 {
		// Only vertical
		take := min(remaining, n-1)
		if take > 0 {
			steps = append(steps, Step{take, "D"})
			remaining -= take
		}
		if remaining > 0 {
			steps = append(steps, Step{remaining, "U"})
			remaining = 0
		}
	} else {
		// General case
		for row := 1; row < n && remaining > 0; row++ {
			dir := "R"
			if row%2 == 0 {
				dir = "L"
			}

			if remaining >= 3*(m-1)+1 {
				s := "RDU"
				if dir == "L" {
					s = "LDU"
				}
				steps = append(steps, Step{m - 1, s})
				remaining -= 3 * (m - 1)
				steps = append(steps, Step{1, "D"})
				remaining -= 1
			} else {
				take := min(remaining, m-1)
				if take > 0 {
					steps = append(steps, Step{take, dir})
					remaining -= take
				}
				if remaining > 0 && take == m-1 {
					steps = append(steps, Step{1, "D"})
					remaining -= 1
				}
			}
		}

		if remaining > 0 {
			row := n
			dir := "R"
			if row%2 == 0 {
				dir = "L"
			}
			opp := "L"
			if dir == "L" {
				opp = "R"
			}

			for remaining > 0 {
				take := min(remaining, m-1)
				steps = append(steps, Step{take, dir})
				remaining -= take
				if remaining == 0 {
					break
				}
				take = min(remaining, m-1)
				steps = append(steps, Step{take, opp})
				remaining -= take
				dir, opp = opp, dir
			}
		}
	}

	fmt.Fprintln(out, len(steps))
	for _, step := range steps {
		fmt.Fprintln(out, step.f, step.s)
	}
}
```