// Slower C++ solution:
#include <bits/stdc++.h>



using namespace std;



typedef long long ll;



// esdgfjasgdfasjdlf

//fasdkjfajsdgfjkasdf

//flaskjdgfkjasdgfjkas

//fasdlkfgsljdf



#define MAXN 100010



ll x[MAXN], dif[MAXN], dag[MAXN], d[MAXN], cc[MAXN];

vector<ll> dor[MAXN];

ll answer[MAXN];

ll n, m, k;



int main() {

	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	cin >> n;

	for (int i = 0; i < n; i++)

		cin >> x[i];

	cin >> m >> k;

	for (int i = 1; i < n; i++)

		dif[i] = i;

	for (int i = 0; i < m; i++) {

		int z; cin >> z;

		swap(dif[z], dif[z - 1]);

	}

	for (int i = 1; i < n; i++)

		dag[dif[i]] = i;

	for (int i = 1; i < n; i++) {

		int v = i, cnt = 0;

		while (!d[v]) {

			d[v] = i; cc[v] = cnt++;

			dor[i].push_back(v);

			v = dag[v];

		}

	}

	for (int i = 1; i < n; i++) 

		answer[dor[d[i]][(k + cc[i]) % (int)dor[d[i]].size()]] = i;

	answer[0] = x[0];

	for (int i = 1; i < n; i++)

		answer[i] = answer[i - 1] - x[answer[i] - 1] + x[answer[i]];

	for (int i = 0; i < n; i++)

		cout << answer[i] << '\n';

	//system("pause");

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 3.46837743643705x):
#define ENABLE_LL

#include <iostream>

#include <cstdio>

#include <map>

#include <set>

#include <vector>

#include <algorithm>

#include <cstdlib>

#include <queue>

#include <cmath>

#include <cstring>

using namespace std;



void init();

void solve();

int main(){

try { 



#ifndef CUSTOM_MAIN

#ifdef MULTIPLE_TEST_CASES_WITH_T



int T; scanf("%d",&T); while(T--) {init(); solve();}



#else

#ifdef MULTIPLE_TEST_CASES_WITHOUT_T



while(1) {try{init(); } catch(bool t){return 0;} solve(); }



#else



init(); solve();



#endif

#endif

#endif



} catch (const char* s) { return 0; }

    return 0;

}



#ifdef ENABLE_LL

#define int long long

#endif



#ifdef ENABLE_LL

#define I "%lld"

#define II "%lld%lld"

#define III "%lld%lld%lld"

#define IIII "%lld%lld%lld%lld"

#define IN "%lld\n"

#define IIN "%lld%lld\n"

#define IIIN "%lld%lld%lld\n"

#define IIIIN "%lld%lld%lld%lld\n"

#else

#define I "%d"

#define II "%d%d"

#define III "%d%d%d"

#define IIII "%d%d%d%d"

#define IN "%d\n"

#define IIN "%d%d\n"

#define IIIN "%d%d%d\n"

#define IIIIN "%d%d%d%d\n"

#endif



#ifdef __LOCALE__

#define see(a) std::cout << #a << "=" << a << std::endl

#define ses(a) std::cout << #a << "=" << a << " " 

#else

#define see(a) //std::cout << #a << "=" << a << std::endl

#define ses(a)

#endif

#define repe(a,b) for (int a=0;a<(int)b.size();a++)

#define rep(i,n) for (int i=0;i<n;i++)

#define repa(i,n) for (int i=1;i<=n;i++)

#define repi(i,a,b) for (int i=a;i<=b;i++) 

#define repb(i,a,b) for (int i=a;i>=b;i--)

typedef pair < int , int > pr; typedef pair < pr  , int > prr;

#define L first

#define R second

template <class T> inline bool checkMin(T& a , T b) { return (a > b ? a=b,1 : 0); }

template <class T> inline bool checkMax(T& a , T b) { return (a < b ? a=b,1 : 0); }

class Scanner{ private: istream& ist;public: Scanner(istream& in):ist(in){} string next(){ string r; ist >> r; return r; } string nextLine(){ string r; getline(ist,r); return r; } int nextInt(){ int r; ist >> r; return r; } double nextDouble(){ double r; ist >> r; return r; } char nextChar(){ char r; ist>>r; return r;} }; Scanner sc(cin);

void ALERT(bool judgememt, const char* phrase) { if (judgememt) { puts(phrase); throw "ALERT"; } }

bool alert(bool judgememt, const char* phrase) { if (judgememt) puts(phrase); return judgememt; }



const int N = 100005;

const int K = 60;

vector < int > swp[K];



int n, m, k;

vector < int > aa;



inline vector < int > Init() {

    vector < int > res(n-1);

    rep (i,n-1) res[i] = i;

    return res;

}



vector < int > To (vector < int > a, vector < int > b) {

    vector < int > res = Init();

    rep (i,n-1) res[i] = a[b[i]];

    return res;

}



void init() {

    scanf(I,&n);

    rep (i,n) aa.push_back(sc.nextInt());

    scanf(II,&m,&k);

    swp[0] = Init();

    rep (i,m) {

        int a=sc.nextInt();

        see(a);

        swap(swp[0][a-2],swp[0][a-1]);

    }

    rep (i,K-1)  {

        swp[i+1] = To(swp[i],swp[i]);

        rep (j,n-1) ses(swp[i][j]); see("");

    }

}



void solve() {

    vector < int > a=Init();

    repb(i,K-1,0) {

        int d = 1LL<<i;

        if (k >= d) {

            k -= d;

            ses(k);see(i);

            a = To(a,swp[i]);

        }

    }

        rep (j,n-1) ses(a[j]); see("");

    vector < int > s;

    rep (i,n-1) s.push_back(aa[i+1]-aa[i]);

    vector < int > an = To(s, a);

    vector < int > ans;

    ans.push_back(aa[0]);

    rep (i,n-1) ans.push_back(ans.back() + an[i]);

    for (int i: ans) printf(IN,i);

}