← Home
```go
package main

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

func main() {
	sc := bufio.NewScanner(os.Stdin)
	sc.Split(bufio.ScanWords)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	read := func() int {
		sc.Scan()
		x, _ := strconv.Atoi(sc.Text())
		return x
	}

	if !sc.Scan() {
		return
	}
	n, _ := strconv.Atoi(sc.Text())
	l := read()
	r := read()

	a := make([]int, n)
	for i := 0; i < n; i++ {
		a[i] = read()
	}

	pos := make([]int, n+1)
	for i := 0; i < n; i++ {
		p := read()
		pos[p] = i
	}

	b := make([]int, n)
	var curr int

	for k := 1; k <= n; k++ {
		idx := pos[k]
		minVal := l - a[idx]
		maxVal := r - a[idx]

		if k == 1 {
			curr = minVal
		} else {
			curr++
			if curr < minVal {
				curr = minVal
			}
		}

		if curr > maxVal {
			fmt.Fprintln(out, "-1")
			return
		}

		b[idx] = a[idx] + curr
	}

	for i := 0; i < n; i++ {
		if i > 0 {
			out.WriteByte(' ')
		}
		out.WriteString(strconv.Itoa(b[i]))
	}
	out.WriteByte('\n')
}
```