#pragma GCC optimize (2)
#include <bits/stdc++.h>
typedef long long int LL;
using namespace std;
const int M = 200+5;
const int MOD = 1e9+7;
/****************************************************/
int n,m,k;
struct Matrix{
LL m[M][M];
void clearO(){
for(int i=0; i<n; i++) //初始化矩阵
for(int j=0; j<n; j++)
m[i][j] = 0;
}
void clearE(){
for(int i=0; i<n; i++) //初始化矩阵
for(int j=0; j<n; j++)
m[i][j] = (i==j);
}
void display(){
for(int i=0; i<n; i++){
for(int j=0; j<n; j++)
printf("%d ",m[i][j]);
puts("");
}
puts(" ------- ");
}
};
Matrix a,b,c,d;
Matrix operator * (Matrix &a,Matrix &b){
c.clearO();
for(int k=0;k<n;k++)for(int i=0;i<n;i++)for(int j=0;j<n;j++)
c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j]+MOD)%MOD;
return c;
}
// Matrix operator * (Matrix &a,Matrix &b){
// c.clearO();
// for (int k = 0; k < n; k++){
// for (int j = 0; j < n; j++){
// c.m[0][j] = (c.m[0][j] + a.m[0][k] * b.m[k][j]) % MOD;
// }
// }
// for (int i = 1; i < n; i++){
// c.m[i][0] = c.m[i - 1][n - 1];
// for (int j = 1; j < n; j++)
// c.m[i][j] = c.m[i - 1][j - 1];
// }
// return c;
// }
Matrix operator ^ (Matrix &a,LL b){
d.clearE();
for(;b;b>>=1,a=a*a)
if(b&1) d=d*a;
return d;
}
int main(){
// freopen("tiS2_1.in" ,"r",stdin);
// freopen("tiS2_1.out","w",stdout);
int _ = 1;
for(scanf("%d",&_);_--;){
scanf("%d%d%d",&n,&m,&k);
a.clearO(),b.clearO();
for(int i=0;i<n;i++) scanf("%lld",&a.m[0][i]);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i!=j&&min(abs((j-i+n)%n),abs((i-j+n)%n))<k) {
b.m[i][j] = k-min(abs((j-i+n)%n),abs((i-j+n)%n));
}
}
}
b = b^(m);
a = a*b;
printf("%lld",a.m[0][0]);
for(int i=1;i<n;i++) printf(" %lld",a.m[0][i]);
puts("");
}
return 0;
}