import sys

input = sys.stdin.readline



N,L,T = list(map(int,input().split()))

XW = [[int(x) for x in input().split()] for _ in range(N)]



X,W = list(zip(*XW))



DX = [1 if w == 1 else -1 for w in W]



Y = [(x+dx*T)%L for x,dx in zip(X,DX)]

y0 = Y[0]

Y.sort()



# 番号1がすれ違わず進んだ場所に相当するアリの番号

# すれ違うたびに1増える（W1=1） or 1減る（W1=-1）

# T秒ちょうどもすれ違い終わったと考える



x = 0

x0,dx0 = X[0],DX[0]

for y,dy in zip(X[1:],DX[1:]):

    if dx0 == dy:

        continue

    if dx0 == 1 and dy == -1:

        # 正の向きに追い越すので番号がひとつ増える

        x += (2*T-(y-x0)-1)//L + 1

    if dx0 == -1 and dy == 1:

        x -= (2*T-(L+x0-y))//L + 1

x %= N



i = Y.index(y0)



Y += Y



answer = [None] * N

answer[x:N] = Y[i:i+N-x]

answer[0:x] = Y[i+N-x:i+N]



print(('\n'.join(map(str,answer))))



import sys

import numpy as np



read = sys.stdin.buffer.read

readline = sys.stdin.buffer.readline

readlines = sys.stdin.buffer.readlines



"""

・順序が固定されるので、区間だったら簡単

・円のときも、地点 0 をそれぞれの方向に通った人数を見れば計算できる

"""



N, L, T = list(map(int, readline().split()))

XW = np.array(read().split(), np.int64)

X = XW[::2]

W = XW[1::2]



speed = np.where(W == 1, 1, -1)



Y = X + speed * T



n = (Y // L - X // L).sum()

n %= N



Y %= L

Y.sort()

Y = np.concatenate((Y[n:], Y[:n]))



print(('\n'.join(map(str, Y.tolist()))))
import sys

input = sys.stdin.readline
N, L, T = list(map(int, input().split()))
XW = [[int(x) for x in input().split()] for _ in range(N)]
X, W = list(zip(*XW))
DX = [1 if w == 1 else -1 for w in W]
Y = [(x + dx * T) % L for x, dx in zip(X, DX)]
y0 = Y[0]
Y.sort()
# 番号1がすれ違わず進んだ場所に相当するアリの番号
# すれ違うたびに1増える（W1=1） or 1減る（W1=-1）
# T秒ちょうどもすれ違い終わったと考える
x = 0
x0, dx0 = X[0], DX[0]
for y, dy in zip(X[1:], DX[1:]):
    if dx0 == dy:
        continue
    if dx0 == 1 and dy == -1:
        # 正の向きに追い越すので番号がひとつ増える
        x += (2 * T - (y - x0) - 1) // L + 1
    if dx0 == -1 and dy == 1:
        x -= (2 * T - (L + x0 - y)) // L + 1
x %= N
i = Y.index(y0)
Y += Y
answer = [None] * N
answer[x:N] = Y[i : i + N - x]
answer[0:x] = Y[i + N - x : i + N]
print(("\n".join(map(str, answer))))

import sys
import numpy as np

read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
"""
・順序が固定されるので、区間だったら簡単
・円のときも、地点 0 をそれぞれの方向に通った人数を見れば計算できる
"""
N, L, T = list(map(int, readline().split()))
XW = np.array(read().split(), np.int64)
X = XW[::2]
W = XW[1::2]
speed = np.where(W == 1, 1, -1)
Y = X + speed * T
n = (Y // L - X // L).sum()
n %= N
Y %= L
Y.sort()
Y = np.concatenate((Y[n:], Y[:n]))
print(("\n".join(map(str, Y.tolist()))))

+import numpy as np -input = sys.stdin.readline -N, L, T = list(map(int, input().split())) -XW = [[int(x) for x in input().split()] for _ in range(N)] -X, W = list(zip(*XW)) -DX = [1 if w == 1 else -1 for w in W] -Y = [(x + dx * T) % L for x, dx in zip(X, DX)] -y0 = Y[0] +read = sys.stdin.buffer.read +readline = sys.stdin.buffer.readline +readlines = sys.stdin.buffer.readlines +""" +・順序が固定されるので、区間だったら簡単 +・円のときも、地点 0 をそれぞれの方向に通った人数を見れば計算できる +""" +N, L, T = list(map(int, readline().split())) +XW = np.array(read().split(), np.int64) +X = XW[::2] +W = XW[1::2] +speed = np.where(W == 1, 1, -1) +Y = X + speed * T +n = (Y // L - X // L).sum() +n %= N +Y %= L -# 番号1がすれ違わず進んだ場所に相当するアリの番号 -# すれ違うたびに1増える（W1=1） or 1減る（W1=-1） -# T秒ちょうどもすれ違い終わったと考える -x = 0 -x0, dx0 = X[0], DX[0] -for y, dy in zip(X[1:], DX[1:]): -    if dx0 == dy: -        continue -    if dx0 == 1 and dy == -1: -        # 正の向きに追い越すので番号がひとつ増える -        x += (2 * T - (y - x0) - 1) // L + 1 -    if dx0 == -1 and dy == 1: -        x -= (2 * T - (L + x0 - y)) // L + 1 -x %= N -i = Y.index(y0) -Y += Y -answer = [None] * N -answer[x:N] = Y[i : i + N - x] -answer[0:x] = Y[i + N - x : i + N] -print(("\n".join(map(str, answer)))) +Y = np.concatenate((Y[n:], Y[:n])) +print(("\n".join(map(str, Y.tolist()))))