#include <stdio.h>
int main()
{
int n, L, t;
scanf("%d %d %d",&n, &L, &t);
struct ball
{
int number;//小球位置
int pre;//前一秒的位置
int flag;//0向右移动, 1 向左移动
}ball[n];
int i;
for(i = 0; i < n; i++)
{
scanf("%d",&ball[i].number);//输入小球的位置
}
int j, k, m;
//第一次移动小球
for(j = 0; j < n; j++)
{
if(ball[j].number == L)//判断小球是否到达端点
{
ball[j].flag = 1;
}
else
{
ball[j].flag = 0;
}
ball[j].pre = ball[j].number;
if(ball[j].flag == 1)
{
ball[j].number -= 1;
}
else
{
ball[j].number += 1;
}
}
// for(i = 0; i < n; i++)
// {
// printf("%d ",ball[i].number);
// }
int q;
for(i = 1; i < t; i++)//每秒过去
{
for(k = 0; k < n-1; k++)//判断小球是否相撞
{
for(m = k+1; m < n; m++)
{
if(ball[k].number == ball[m].number)
{
if (ball[k].pre > ball[m].pre)//判断碰撞后移动的方向
{
ball[k].flag = 0;
ball[m].flag = 1;
}
else
{
ball[k].flag = 1;
ball[m].flag = 0;
}
}
}
}
for(q = 0; q < n; q++)
{
if(ball[q].number == 0)//判断小球是否到达端点
{
ball[q].flag = 0;
}
else if(ball[q].number == L)
{
ball[q].flag = 1;
}
}
for(j = 0; j < n; j++)//移动小球
{
ball[j].pre = ball[j].number;
if(ball[j].flag == 1)
{
ball[j].number -= 1;
}
else
{
ball[j].number += 1;
}
}
// for(q = 0; q < n; q++)
// {
// printf("%d ",ball[q].number);
// printf("\n");
// }
}
for(i = 0; i < n; i++)
{
printf("%d ",ball[i].number);
}
return 0;
}