// https://szkopul.edu.pl/problemset/problem/VdGoo4AEt68ZDztfDsJ34iiP/site/?key=statement
#include <bits/stdc++.h>
// using namespace std;
#define int long long
constexpr int sizik = 1000 * 1001, sizik2 = 20;
#define ar std::array
#define pr std::pair
#define vec std::vector
// #define GARY_DBG
typedef vec<vec<int>> _kra;
int32_t to[sizik];
int perm[2][sizik], res[sizik];
void skacz(int m, int n) {
int i1 = 0, i2 = 1;
long long p2 = 1;
for (int i = 0; i < n; ++i) {
perm[0][i] = to[i + 1] - 1;
res[i] = i;
}
while (p2 <= m) {
if (p2 & m)
for (int i = 0; i < n; ++i)
res[i] = perm[i1][res[i]];
for (int i = 0; i < n; ++i)
perm[i2][i] = perm[i1][perm[i1][i]];
i1 ^= i2;
i2 ^= i1;
i1 ^= i2;
p2 *= 2;
}
}
int32_t przedzial_I[sizik];
void solve() {
int n, k, m;
std::cin >> n >> k >> m;
std::vector<int64_t> p(n);
for (auto& a : p) {
std::cin >> a;
}
przedzial_I[1] = 1;
for (int i = 2; i <= n; i++) {
przedzial_I[i] = przedzial_I[i - 1];
while ((przedzial_I[i] + k < n) && (przedzial_I[i] < i) &&
((p[przedzial_I[i] + k + 1 - 1] - p[i - 1]) < (p[i - 1] - p[przedzial_I[i] - 1]))) {
przedzial_I[i]++;
}
}
to[1] = k + 1;
to[n] = n - k;
for (int i = 2; i < n; i++) {
int64_t left_d = std::llabs(p[przedzial_I[i] - 1] - p[i - 1]);
int64_t right_d = std::llabs(p[przedzial_I[i] + k - 1] - p[i - 1]);
bool useRight = false;
if (left_d < right_d) {
useRight = true;
}
if (useRight) {
int x = przedzial_I[i] + k;
to[i] = x;
} else {
int x = przedzial_I[i];
to[i] = x;
}
}
skacz(m, n);
for (int i = 0; i < n; i++) {
std::cout << (res[i] + 1) << " ";
}
std::cout << std::endl;
}
int32_t main() {
#ifndef GARY_DBG
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
#endif
int t = 1;
// std::cin >> t;
for (; t > 0; t--) {
solve();
}
return 0;
}