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

//#include <ext/pb_ds/assoc_container.hpp>

//#include <ext/pb_ds/tree_policy.hpp>

//using namespace __gnu_pbds;

//#define eps 1e-8

//#define eq(x,y) (fabs((x)-(y)) < eps)

using namespace std;

typedef long long ll;

typedef long double ld;

typedef pair<int,int>pii;

const ll mod = 998244353;

long double PI = acosl(-1);

const ll infl = 3e18+10;

const int inf = 1e9+10;

const int nmax = 2e5+5;

const int MAXLG = log2(nmax)+1;

//mt19937 rng(chrono::system_clock::now().time_since_epoch().count());

//typedef tree< int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ost;



vector<int>g[nmax];

bool vis[nmax];

vector<int>serial;



void dfs(int u){

    if(vis[u]) return;

    vis[u] = true;

    serial.push_back(u);

    dfs(g[u][0]);

}



int main(){

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



    int n;

    cin>>n;

    vector<int>v(n);

    vector<int>dif(n);

    for(int &x : v) cin>>x;

    for(int i=1; i<n; i++) dif[i] = v[i] - v[i-1];

    int m;

    ll k;

    cin>>m>>k;

    vector<int>permu(n);

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

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

        int pos;

        cin>>pos;

        swap(permu[pos], permu[pos-1]);

    }

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

        g[ permu[i] ].push_back(i);

    }

    vector<int>koigese(n);

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

        if(!vis[i]){

            dfs(i);

            int sz = serial.size();

            for(int j=0; j<sz; j++){

                int u = serial[j];

                koigese[u] = serial[ (k+j)%sz ];

            }

            serial.clear();

        }

    }

    vector<int>dif2(n);

    for(int i=1; i<n; i++) dif2[ koigese[i] ] = dif[i];



    vector<ll>ans = {v[0]};

    for(int i=1; i<n; i++) ans.push_back(ans.back() + dif2[i]);



    for(auto z : ans)

        cout<<z<<"\n";



}

/*

*/


// Faster C++ solution for the same problem (measured speedup: 6.5589102399030015x):
// InterestingLSY

// codeforces&github: interestingLSY, qq: 2659723130

// 《幽灵公主》是真的好看！

#ifdef intLSY

#include <intlsy/stdc++.h>

#else

#include <bits/stdc++.h>

#endif

#include <bits/c++0x_warning.h>

using namespace std;

#define il inline

#define elif else if



// Type

#define ld double

#define ll long long

#define ull unsigned ll



// Vector

#define vc vector

#define Pb push_back

#define Pf push_front

#define Eb emplace_back

#define All(x) x.begin(),x.end()

#define AllRev(x) x.rbegin(),x.rend()



// Memory

#define Ms(_data) memset(_data,0,sizeof(_data))

#define Msn(_data,_num) memset(_data,_num,sizeof(_data))



// Pair

#define F first

#define S second

#define pii pair<int,int>

#define pli pair<ll,int>

#define pil pair<int,ll>

#define pll pair<ll,ll>



// Loop

#define For(i,j) for( int (i) = 1 ; (i) <= (j) ; ++(i) )

#define For0(i,j) for( int (i) = 0 ; (i) < (j) ; ++(i) )

#define Forx(i,j,k) for( int (i) = (j) ; (i) <= (k) ; ++(i) )

#define Forstep(i,j,k,st) for( int (i) = (j) ; (i) <= (k) ; (i) += (st) )

#define fOR(i,j) for( int (i) = (j) ; (i) >= 1 ; --(i) )

#define fOR0(i,j) for( int (i) = (j)-1 ; (i) >= 0 ; --(i) )

#define fORx(i,j,k) for( int (i) = (k) ; (i) >= (j) ; --(i) )



// Read

struct InputReader{

	static constexpr int MAXSZ = 1048576;

	char buf[MAXSZ]; int p, ed;

	bool detectedEOF = false;

	il InputReader(){ p = MAXSZ; }

	il void Flush(){ p = 0; ed = fread(buf,1,MAXSZ,stdin); }

	il void GetChar( char &c ){

		if(p >= MAXSZ) Flush();

		if( p == ed ){ detectedEOF = true; }

		c = buf[p++];

	}

	il void ReadNum( char &c ){ GetChar(c); while( !isdigit(c) && c != '-' && !detectedEOF ) GetChar(c); }

	il void ReadAlpha( char &c ){ GetChar(c); while( !isalpha(c) && !detectedEOF ) GetChar(c); }

	il void ReadInt( int &ans ){

		ans = 0; int nega = 1;

		char c; ReadNum(c); if(detectedEOF) return;

		if( c == '-' ){

			nega = -1;

			GetChar(c);

		}

		while( isdigit(c) && !detectedEOF ){

			ans = ans*10 + c-'0';

			GetChar(c);

		}

		ans *= nega;

	}

	il void Readll( ll &ans ){

		ans = 0; int nega = 1;

		char c; ReadNum(c); if(detectedEOF) return;

		if( c == '-' ){

			nega = -1;

			GetChar(c);

		}

		while( isdigit(c) && !detectedEOF ){

			ans = ans*10 + c-'0';

			GetChar(c);

		}

		ans *= nega;

	}

	il void ReadString( string &x ){

		x.clear(); char ch; GetChar(ch);

		while( !isdigit(ch) && !isalpha(ch) && ch != '#' && ch != '.' && !detectedEOF ) GetChar(ch); if(detectedEOF) return;

		while( (isdigit(ch) || isalpha(ch) || ch == '#' || ch == '.') && !detectedEOF ){

			x += ch;

			GetChar(ch);

		}

	}

	il void ReadCString( char s[] ){

		int len = 0; char ch; GetChar(ch);

		while( !isdigit(ch) && !isalpha(ch) && ch != '#' && ch != '.' && !detectedEOF ) GetChar(ch); if(detectedEOF) return;

		while( (isdigit(ch) || isalpha(ch) || ch == '#' || ch == '.') && !detectedEOF ){

			s[len++] = ch;

			GetChar(ch);

		}

		s[len] = '\0';

	}

	il void SpecialRead( char &c ){

		GetChar(c); if(detectedEOF) return;

		while( !isdigit(c) && !isalpha(c) && c != '#' && c != '.' && c != '=' && c != 'B' && !detectedEOF ) GetChar(c);

	}

}In;

il void Read( int &x ){ In.ReadInt(x); }

il void Read( int &x, int &y ){ In.ReadInt(x); In.ReadInt(y); }

il void Read( int &x1 , int &x2 , int &x3 ){ In.ReadInt(x1); In.ReadInt(x2); In.ReadInt(x3); }

il void Read( int &x1 , int &x2 , int &x3 , int &x4 ){ In.ReadInt(x1); In.ReadInt(x2); In.ReadInt(x3); In.ReadInt(x4); }

il void Read( ll &x ){ In.Readll(x); }

il void Read( ll &x, ll &y ){ In.Readll(x); In.Readll(y); }

il void Read( ll &x1 , ll &x2 , ll &x3 ){ In.Readll(x1); In.Readll(x2); In.Readll(x3); }

il void Read( ll &x1 , ll &x2 , ll &x3 , ll &x4 ){ In.Readll(x1); In.Readll(x2); In.Readll(x3); In.Readll(x4); }

template<typename T> void Read( T a[] , int st , int ed ){ Forx(i,st,ed) Read(a[i]); }

#define iRead(k) int k; Read(k);

#define iRead2(a,b) iRead(a); iRead(b);

#define iRead3(a,b,c) iRead2(a,b); iRead(c);

#define iRead4(a,b,c,d) iRead2(a,b); iRead2(c,d);

#define lRead(k) ll k; Read(k);

#define lRead2(a,b) lRead(a); lRead(b);

#define lRead3(a,b,c) lRead2(a,b); lRead(c);

#define lRead4(a,b,c,d) lRead2(a,b); lRead2(c,d);



// File

#define Fin(a) freopen(a,"r",stdin)

#define Fout(a) freopen(a,"w",stdout)

il void FILEIO(){

	#ifdef intLSY

		Fin("in.in");

	#endif

}

il void FILEIO( string pname ){

	#ifndef intLSY

		Fin((pname+".in").c_str());

		Fout((pname+".out").c_str());

	#else

		Fin("in.in");

	#endif

}

il void FILEIO_OICONTEST( string pname ){

	Fin((pname+".in").c_str());

	#ifndef intLSY

		Fout((pname+".out").c_str());

	#endif

}

void Printtime(){

	#ifdef intLSY

		double _timeuse = clock()* 1000.0 / CLOCKS_PER_SEC;

		fprintf(stderr,"\n\nTime usage:\n%.0lf ms\n",_timeuse);

	#endif

}

void END(){ Printtime(); exit(0); }

template<typename T>void END( T mes ){ cout << mes << endl; END(); }



// Debug

#define B cerr << "BreakPoint" << endl;

#define O(x) cerr << #x << " " << (x) << endl;

#define o(x) cerr << #x << " " << (x) << "  ";

template<typename T0>

void P( T0 t0 ){

	cerr << t0 << endl;

}

template<typename T0, typename... Ts>

void P( T0 t0 , Ts... ts ){

	cerr << t0 << " ";

	P(ts...);

}

#define Msz(x) cerr << "Sizeof " << #x << " " << sizeof(x)/1024/1024 << " MB" << endl;

template<typename T>void Print( T a[] , int s , int t , char sp = ' ' , char ed = '\n' ){

	if( s > t ) return;

	for( int i = s ; i < t ; i++ )

		cout << a[i] << sp;

	cout << a[t] << ed;

	cout.flush();

}

template<typename T>void Print( T a , int s = 0 , int t = -1 , char sp = ' ' , char ed = '\n' ){

	if( t == -1 ) t = a.size()-1;

	for( int i = s ; i <= t ; i++ )

		cout << a[i] << sp;

	cout << ed;

	cout.flush();

}



// Optimize

#define Max(a,b) ((a)>(b)?(a):(b))

#define Min(a,b) ((a)<(b)?(a):(b))

#define Mymax(a,b) (a) = max((a),(b))

#define Mymin(a,b) (a) = min((a),(b))

#define MyMax(a,b) (a) = Max((a),(b))

#define MyMin(a,b) (a) = Min((a),(b))

#define INF (0x3f3f3f3f)

#define LINF ((long long)(0x3f3f3f3f3f3f3f3f))

#define Sqr(x) ((x)*(x))

#define Lowbit(a) ((a)&(-(a)))

///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////

constexpr int MAXN = 131072;

constexpr int LOG = 64;



int n,m; ll k;

ll a[MAXN];

int qs[MAXN];



void Readin(){

	Read(n);

	Read(a,1,n);

	Read(m); Read(k);

	Read(qs,1,m);

}



static int to[LOG][MAXN];

void PrepareTo(){

	For(i,n) to[0][i] = i;

	static int nowAt[MAXN];

	For(i,n) nowAt[i] = i;

	For(_i,m){

		int u = qs[_i];

		to[0][nowAt[u-1]] = u;

		to[0][nowAt[u]] = u-1;

		swap(nowAt[u-1],nowAt[u]);

	}

	For(i,LOG-1)

		For(j,n)

			to[i][j] = to[i-1][to[i-1][j]];

}



ll ansl[MAXN];

void Solve(){

	static int finalPos[MAXN];

	static ll finalDis[MAXN];

	For(i,n) finalPos[i] = i;

	fOR0(i,LOG){

		if(k>>i&1^1) continue;

		For(j,n) finalPos[j] = to[i][finalPos[j]];

	}

	static int finalPosRev[MAXN];

	For(i,n) finalPosRev[finalPos[i]] = i;

	// Print(finalPos,1,n);

	For(i,n){

		int fp = finalPosRev[i];

		finalDis[i] = a[fp+1] - a[fp];

		// O(finalDis[i-1]);

		ansl[i] = i == 1 ? a[1] : ansl[i-1] + finalDis[i-1];

	}

}



int main(){

	FILEIO();



	Readin();

	PrepareTo();

	Solve();



	For(i,n)

		printf("%lld\n",ansl[i]);



	END();

}