#include "iostream"
#include "climits"
#include "list"
#include "queue"
#include "stack"
#include "set"
#include "functional"
#include "algorithm"
#include "string"
#include "map"
#include "unordered_map"
#include "unordered_set"
#include "iomanip"
#include "cmath"
#include "random"
#include "bitset"
#include "cstdio"
#include "numeric"
#include "cassert"

using namespace std;

const long long int MOD = 1000000007;
//const int MOD = 998244353;

long long int N, M, K, H, W, L, R;
//int N, M, K, H, W, L, R;


int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> N;
	vector<long long int>v(N);
	for (auto &i : v)cin >> i;
	cin >> M >> K;
	vector<int>p(N - 1);
	for (int i = 0; i < N - 1; i++)p[i] = i;
	for (int i = 0; i < M; i++) {
		cin >> L;
		swap(p[L - 2], p[L - 1]);
	}
	vector<vector<int>>to(62, vector<int>(N - 1));
	for (int i = 0; i < N - 1; i++)to[0][i] = p[i];
	for (int i = 1; i < 62; i++) {
		for (int j = 0; j < N - 1; j++) {
			to[i][j] = to[i - 1][to[i - 1][j]];
		}
	}
	for (int i = 0; i < N - 1; i++) {
		long long int box = K;
		int cnt = i;
		for (int j = 0; j < 62; j++) {
			if ((box >> j) & 1) {
				cnt = to[j][cnt];
			}
		}
		p[i] = cnt;
	}
	long long int num = v[0];
	cout << num << endl;
	for (auto i : p) {
		//cout << i << endl;
		num += v[i+1]-v[i];
		cout << num << endl;
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
#ifdef ENABLE_DEBUG
#define DEBUG(a) cerr<<#a<<"="<<a<<endl
#define DEBUG_ARRAY(a,n) cerr<<#a<<"["<<n<<"]="<<a[n]<<endl
#else
#define dump(a) 
#define dumparr(a,n) 
#endif
#define FOR(i, a, b) for(int i = a;i < b;i++)
#define For(i, a) FOR(i, 0, a)
#define REV(i, a, b) for(int i = b-1;i >= a;i--)
#define Rev(i, a) REV(i, 0, a)
#define REP(a) For(i, a)

typedef long long int ll;
typedef unsigned long long ull;
typedef unsigned int uint;
typedef pair<ll, ll> P;
typedef pair<ll,P> PP;
typedef vector<ll> vll;

const ll INF=(1LL<<50);

vector<ll> d;
vector<ll> powv(vector<ll> &a){
    vector<ll> ret(a.size());
    REP(a.size()){
        ret[i]=a[a[i]];
    }
    return ret;
}
vector<ll> addv(vector<ll> &a,vector<ll> &b){
    vector<ll> ret(a.size());
    REP(a.size()){
        ret[i]=b[a[i]];
    }
    return ret;
}
void swapv(vector<ll> &a,ll b,ll c){
    swap(a[b],a[c]);
}
void solve(long long N, std::vector<long long> x, long long M, long long K, std::vector<long long> a){
    REP(N-1){
        d.push_back(x[i+1]-x[i]);
    }
    vector<ll> h(N-1);
    iota(h.begin(),h.end(),0);
    REP(M){
        swapv(h,a[i],a[i]-1);
    }
    vector<ll> ans(N-1);
    iota(ans.begin(),ans.end(),0);
    while(K>0){
        if((K&1)>0){
            ans=addv(ans,h);
        }
        K>>=1;
        h=powv(h);
    }
    cout<<x[0]<<endl;
    REP(x.size()-1){
        x[i+1]=x[i]+d[ans[i]];
        cout<<x[i+1]<<endl;
    }
}

int main(){
    long long N;
    scanf("%lld",&N);
    std::vector<long long> x(N);
    for(int i = 0 ; i < N ; i++){
        scanf("%lld",&x[i]);
    }
    long long M;
    scanf("%lld",&M);
    long long K;
    scanf("%lld",&K);
    std::vector<long long> a(M);
    for(int i = 0 ; i < M ; i++){
        scanf("%lld",&a[i]);
        a[i]--;
    }
    solve(N, std::move(x), M, K, std::move(a));
    return 0;
}
