← Home
package main

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

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

	a := make([]int, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		a[i], _ = strconv.Atoi(scanner.Text())
	}

	idx := make([]int, n+1)
	for i := 0; i < n; i++ {
		scanner.Scan()
		p, _ := strconv.Atoi(scanner.Text())
		idx[p] = i
	}

	b := make([]int, n)
	var prevC int
	for rank := 1; rank <= n; rank++ {
		i := idx[rank]
		c := l - a[i]
		if rank > 1 {
			if prevC+1 > c {
				c = prevC + 1
			}
		}
		b[i] = a[i] + c
		if b[i] > r {
			fmt.Println("-1")
			return
		}
		prevC = c
	}

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