OI XVII - zab

// 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;
}