← Home
package main

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	buf := make([]byte, 1024*1024)
	scanner.Buffer(buf, 1024*1024)

	scan := func() int64 {
		scanner.Scan()
		val, _ := strconv.ParseInt(scanner.Text(), 10, 64)
		return val
	}

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

	l := make([]int64, n)
	for i := 0; i < n; i++ {
		l[i] = scan()
	}

	t := make([]int64, n)
	for i := 0; i < n; i++ {
		t[i] = scan()
	}

	var currentTime int64 = 0
	var activeDist int64 = 0
	var drinksCount int64 = 0
	var drinkTimes []int64

	for i := 0; i < n; i++ {
		if l[i] > t[i] {
			fmt.Println("-1")
			return
		}

		d := activeDist
		if d > l[i] {
			d = l[i]
		}

		activeDist -= d
		L := l[i] - d
		T := t[i] - d

		currentTime += d

		if L == 0 {
			continue
		}

		req := 2*L - T
		if req < 0 {
			req = 0
		}

		walkDist := L - req
		currentTime += 2 * walkDist

		if req > 0 {
			k := (req + r - 1) / r
			drinksCount += k

			if drinksCount <= 100000 {
				for j := int64(0); j < k; j++ {
					drinkTimes = append(drinkTimes, currentTime+j*r)
				}
			}

			currentTime += req
			activeDist = k*r - req
		}
	}

	fmt.Println(drinksCount)
	if drinksCount <= 100000 {
		writer := bufio.NewWriter(os.Stdout)
		for i, time := range drinkTimes {
			if i > 0 {
				writer.WriteString(" ")
			}
			writer.WriteString(strconv.FormatInt(time, 10))
		}
		writer.WriteString("\n")
		writer.Flush()
	}
}