#include<iostream>
using namespace std;
int main(){
int k,q,r;
//輸入k,q,r
cin >> k >> q >> r;
//字串最多只有20個字元 所以我們可以直接宣告一個長度21 的陣列來存字串
char s[21]={},temp[21]={}; // temp是用來暫存移動s的內容 temporary
cin >> s;
//因為字串最多只有20個字元 所以我們可以直接宣告一個長度21 的陣列來存每行的數字
int num[21]={};
char ans[21][21] = {}; //儲存答案 存要輸出操作 第1 ~ q的每個新字串的第 1-r 個字元
//處理每行數字的操作
for(int j = 0 ; j < q ; j++){
//先存入k個數字
for(int i=0;i<k;i++){
cin >> num[i];
//temp[i] = s[num[i]-1];
//我們在這裡想反了 這裡是要把s的第i個字元放到temp的第num[i]個位置
//所以要改成
temp[num[i]-1] = s[i];
}
//再將s的內容更新成temp的內容
for(int i=0;i<k;i++){
s[i] = temp[i];
cout << s[i];
ans[j][i] = s[i]; // 儲存該次操作後的新字串到 ans
}
cout << endl;
}
// 根據題意輸出結果,每行輸出新字串的第 1 ~ R 個字元
for (int i = 0; i < r; i++) { //r行
for (int j = 0; j < q; j++) { //每行q個字元
cout << ans[j][i]; //輸出每個新字串的第r個字元 ij要反過來
}
cout << endl;
}
}
/*
5 4 1
abcde
2 1 3 5 4
baced
5 1 2 4 3
acdeb
4 1 2 3 5
cdeab
3 1 4 5 2
dbcea
要輸出:輸出 r = 1行,每行 q = 4個字元
bacd
*/
/*
4 3 4
abac
4 1 3 2
bcaa
1 2 3 4
bcaa
2 3 4 1
abca
要輸出:輸出 r = 3行,每行 q = 4個字元
bba
ccb
aac
aaa
*/