#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
const int inf = (1 << 31) - 10;
const int maxn = 1010;
struct Win{
int acc, now;
queue<int> q;
}win[50];
int N, M, K, Q;
int pro[maxn], down[maxn], start[maxn];
int L = 8 * 3600, R = 17 * 3600;
int main(){
scanf("%d %d %d %d", &N, &M, &K, &Q);
for(int i = 1; i <= K; i++){
scanf("%d", &pro[i]);
pro[i] *= 60;
}
for(int i = 1; i <= N; i++){
start[i] = L;
win[i].acc = L + pro[i];
down[i] = win[i].acc;
win[i].now = pro[i];
win[i].q.push(pro[i]);
}
for(int i = N+1; i <= K; i++){
int minlen = inf, idx = 0, minNow = inf;
for(int j = 1; j <= N; j++){
if(minlen > win[j].q.size()){
minlen = win[j].q.size();
idx = j;
}
minNow = min(minNow, win[j].now);
}
if(minlen == M){
int flag = 0;
for(int j = 1; j <= N; j++){
if(win[j].now > minNow){
win[j].now -= minNow;
}else{
win[j].q.pop();
win[j].now = win[j].q.front();
if(flag == 0){
start[i] = win[j].acc;
win[j].acc += pro[i];
down[i] = win[j].acc;
win[j].q.push(pro[i]);
flag = 1;
}
}
}
}else{
start[i] = win[idx].acc;
win[idx].acc += pro[i];
down[i] = win[idx].acc;
win[idx].q.push(pro[i]);
}
}
int x, hh, mm;
for(int i = 0; i < Q; i++){
scanf("%d", &x);
if(start[x] < R){
hh = down[x] / 3600;
mm = (down[x] % 3600) / 60;
printf("%02d:%02d\n", hh, mm);
}else{
printf("Sorry\n");
}
}
return 0;
}