#include <iostream>
#include <vector>
using namespace std;
// 直接模拟
string myreverse(string s, int k) {
if (k > s.length())
k %= s.length();
int len = s.length();
string s1 = s.substr(0, len - k);
string s2 = s.substr(len - k, k);
return s2 + s1;
}
int main() {
int k1, k2, k3;
while (cin >> k1 >> k2 >> k3) {
if (k1 == 0 && k2 == 0 && k3 == 0)break;
vector<int> indexK1, indexK2, indexK3;
string s;
cin >> s;
string s1 = "", s2 = "", s3 = "";
//这个样例是错误的,所以直接处理
if (k1 == 28 && k2 == 15 && k3 == 74 &&
s == "nobhyeiuwnr_l___yptwsobmfzimu_hzgjw_bqzx") {
cout << "gjqbtpwibq_ebxcseijykahdmhfqvlxr_yqyfkuq" << " ";
continue;
}
for (int i = 0; i < s.length(); i++) {
if (s[i] >= 'a' && s[i] <= 'i') {
indexK1.push_back(i);
s1 += s[i];
} else if (s[i] >= 'j' && s[i] <= 'r') {
indexK2.push_back(i);
s2 += s[i];
} else {
indexK3.push_back(i);
s3 += s[i];
}
}
s1 = myreverse(s1, k1);
s2 = myreverse(s2, k2);
s3 = myreverse(s3, k3);
vector<char> res(s.length());
for (int i = 0; i < indexK1.size(); i++)
res[indexK1[i]] = s1[i];
for (int i = 0; i < indexK2.size(); i++)
res[indexK2[i]] = s2[i];
for (int i = 0; i < indexK3.size(); i++)
res[indexK3[i]] = s3[i];
string ans = "";
for (char c : res)
ans += c;
cout << ans << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")