← Home
package main

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

type Ant struct {
	p   int64
	dir int64
	id  int
}

type AntSlice []Ant

func (a AntSlice) Len() int           { return len(a) }
func (a AntSlice) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a AntSlice) Less(i, j int) bool { return a[i].p < a[j].p }

type Int64Slice []int64

func (a Int64Slice) Len() int           { return len(a) }
func (a Int64Slice) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a Int64Slice) Less(i, j int) bool { return a[i] < a[j] }

func floorDiv(x, m int64) int64 {
	if x >= 0 {
		return x / m
	}
	return (x - m + 1) / m
}

func quickSortAnts(a AntSlice) {
	if len(a) < 2 {
		return
	}
	left, right := 0, len(a)-1
	pivot := len(a) / 2
	a[pivot], a[right] = a[right], a[pivot]
	for i := range a {
		if a[i].p < a[right].p {
			a[left], a[i] = a[i], a[left]
			left++
		}
	}
	a[left], a[right] = a[right], a[left]
	quickSortAnts(a[:left])
	quickSortAnts(a[left+1:])
}

func quickSortInt64(a Int64Slice) {
	if len(a) < 2 {
		return
	}
	left, right := 0, len(a)-1
	pivot := len(a) / 2
	a[pivot], a[right] = a[right], a[pivot]
	for i := range a {
		if a[i] < a[right] {
			a[left], a[i] = a[i], a[left]
			left++
		}
	}
	a[left], a[right] = a[right], a[left]
	quickSortInt64(a[:left])
	quickSortInt64(a[left+1:])
}

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

	var scanInt = func() int64 {
		scanner.Scan()
		b := scanner.Bytes()
		var res int64
		for _, v := range b {
			res = res*10 + int64(v-'0')
		}
		return res
	}

	var scanDir = func() int64 {
		scanner.Scan()
		if scanner.Bytes()[0] == 'L' {
			return -1
		}
		return 1
	}

	if !scanner.Scan() {
		return
	}
	var n int64
	for _, v := range scanner.Bytes() {
		n = n*10 + int64(v-'0')
	}

	m := scanInt()
	t := scanInt()

	ants := make(AntSlice, n)
	for i := int64(0); i < n; i++ {
		ants[i] = Ant{
			p:   scanInt() - 1,
			dir: scanDir(),
			id:  int(i),
		}
	}

	quickSortAnts(ants)

	finalPos := make(Int64Slice, n)
	var crosses int64

	for i := int64(0); i < n; i++ {
		end := ants[i].p + t*ants[i].dir
		crosses += floorDiv(end, m)

		modPos := end % m
		if modPos < 0 {
			modPos += m
		}
		finalPos[i] = modPos
	}

	quickSortInt64(finalPos)

	C := crosses % n
	if C < 0 {
		C += n
	}

	ans := make([]int64, n)
	for i := int64(0); i < n; i++ {
		ans[ants[i].id] = finalPos[(C+i)%n] + 1
	}

	writer := bufio.NewWriter(os.Stdout)
	for i := int64(0); i < n; i++ {
		if i > 0 {
			writer.WriteByte(' ')
		}
		writer.WriteString(strconv.FormatInt(ans[i], 10))
	}
	writer.WriteByte('\n')
	writer.Flush()
}