solution
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
struct node
{
int poptime, endtime;
queue<int> q;
};
const int N = 1010;
int main()
{
int n, m, k, q;
cin >> n >> m >> k >> q;
vector<int> time(k + 1), result(k + 1);
for (int i = 1; i <= k; i++)
cin >> time[i];
vector<node> window(n + 1);
vector<bool> sorry(k + 1);
int idx = 1;
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
if (idx <= k)
{
window[j].q.push(time[idx]);
if (window[j].endtime >= 540)
sorry[idx] = true;
window[j].endtime += time[idx];
if (i == 1)
window[j].poptime = window[j].endtime;
result[idx] = window[j].endtime;
idx++;
}
}
}
while (idx <= k)
{
int tempwindow = 1, temptime = window[1].poptime;
for (int i = 2; i <= n; i++)
{
if (temptime > window[i].poptime)
{
temptime = window[i].poptime;
tempwindow = i;
}
}
window[tempwindow].q.pop();
window[tempwindow].poptime += window[tempwindow].q.front();
window[tempwindow].q.push(time[idx]);
if (window[tempwindow].endtime >= 540)
sorry[idx] = true;
window[tempwindow].endtime += time[idx];
result[idx] = window[tempwindow].endtime;
idx++;
}
for (int i = 1; i <= q; i++)
{
int x;
cin >> x;
int timm = result[x];
if (sorry[x])
{
cout << "Sorry" << endl;
}
else
{
printf("%02d:%02d\n", (timm + 480) / 60, (timm + 480) % 60);
}
}
}