// Slower C++ solution:
#pragma GCC optimize(3)

#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cmath>

#include<cstring>

#include<string>

#include<algorithm>

#include<vector>

#include<map>

#include<set>

#include<list>

#include<queue>

#include<stack>

#include<bitset>

#include<deque>

using namespace std;

#define ll long long

#define inf 0x3f3f3f3f

#define ri register int

#define il inline

#define fi first

#define se second

#define mp make_pair

#define pi pair<int,int>

#define mem0(x) memset((x),0,sizeof (x))

#define mem1(x) memset((x),0x3f,sizeof (x))

il char gc() {

	static const int BS = 1 << 22;

	static unsigned char buf[BS], *st, *ed;

	if (st == ed) ed = buf + fread(st = buf, 1, BS, stdin);

	return st == ed ? EOF : *st++;

}

#define gc getchar

template<class T>void in(T &x) {

	x = 0;

	bool f = 0;

	char c = gc();

	while (c < '0' || c > '9') {

		if (c == '-') f = 1;

		c = gc();

	}

	while ('0' <= c && c <= '9') {

		x = (x << 3) + (x << 1) + (c ^ 48);

		c = gc();

	}

	if (f) x = -x;

}

#undef gc

#define pb push_back

#define N 100010

#define M N

#define int ll

int v[M], u[M], nx[M];

int cnt, head[N];

il void add(int uu, int vv) {

	u[++cnt] = uu, v[cnt] = vv, nx[cnt] = head[uu];

	head[uu] = cnt;

}

int n, m, k;

double pos[N];

double de[N];

double ans[N];

int num[N], ys[N];

int cur;

int bel[N], rk[N];

vector<int>hv[N];

void dfs(int x, int k) {

	bel[x] = k;

	hv[k].pb(x);

	rk[x] = hv[k].size() - 1;

	for (ri i = head[x]; i; i = nx[i])

		if (!bel[v[i]]) dfs(v[i], k);

}

signed main() {

#ifndef ONLINE_JUDGE

	//freopen("in.in", "r", stdin);

#endif

	in(n);

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

		scanf("%lf", &pos[i]);

		de[i] = pos[i] - pos[i - 1];

		num[i] = i;

	}

	in(m), in(k);

	for (ri i = 1, t; i <= m; ++i) {

		in(t);

		swap(num[t], num[t + 1]);

	}

	for (ri i = 1; i <= n; ++i) ys[num[i]] = i;

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

		add(i, ys[i]);

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

		if (!bel[i]) {

			++cur;

			dfs(i, cur);

		}

	for (ri i = 1, t; i <= n; ++i) {

		t = hv[bel[i]][(rk[i] + k) % hv[bel[i]].size()];

		ans[t] = de[i];

	}

	double tmp = 0.0;

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

		tmp += ans[i];

		printf("%.9f\n", tmp);

	}

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 3.5873135613556215x):
#include<bits/stdc++.h>

#define hh puts("")

#define int long long

using namespace std;

int n,s,a[100005],cha[100005],m,k,t[100005];

inline int read(){

	int ret=0,ff=1;char ch=getchar();

	while(!isdigit(ch)){if(ch=='-') ff=-1;ch=getchar();}

	while(isdigit(ch)){ret=(ret<<3)+(ret<<1)+(ch^48);ch=getchar();}

	return ret*ff;

}

inline void ksm(int p){

	while(p){

		if(p&1){

			for(int i=1;i<=n;i++) t[i]=cha[a[i]];

			for(int i=1;i<=n;i++) cha[i]=t[i];

		}

		p>>=1;

		for(int i=1;i<=n;i++) t[i]=a[a[i]];

		for(int i=1;i<=n;i++) a[i]=t[i];

	}

}

signed main(){

	n=read();

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

		a[i]=read();

		cha[i]=a[i]-a[i-1];

	}

	for(int i=1;i<=n;i++) a[i]=i;//改存位置 

	m=read(),k=read();

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

		int t=read();

		swap(a[t],a[t+1]);

	}

	//当前存的是一套体操后对应位置

	//b[i]表示原来在i位置,一套体操后的位置 

	ksm(k);

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

		s+=cha[i];//把差分数组加上去

		printf("%lld.0\n",s);

	}

	return 0;

}