#ifdef _DEBUG
#pragma warning(disable : 4996)
#endif
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <algorithm>
#include <functional>
#include <sstream>
#include <utility>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <cctype>
#define CLEAR(a, b) memset(a, b, sizeof(a))
#define CLOSE() ios::sync_with_stdio(false)
#define IN() freopen("in.txt", "r", stdin)
#define OUT() freopen("out.txt", "w", stdout)
#define PF(a) printf("%d\n", a)
#define SF(a) scanf("%d", &a)
#define SFF(a, b) scanf("%d%d", &a, &b)
#define FOR(i, a, b) for(int i = a; i < b; ++i)
#define LL long long
#define MAXN 200010
#define MAXM 100005
#define MOD 1000007
#define INF 2147483648
using namespace std;
//-------------------------CHC------------------------------//
//HDUOJ 2795 Billboard
#define Lson cur<<1, l, mid
#define Rson cur<<1|1, mid+1, r
int res[MAXN << 2];
int h, w, n;
void PushUp(int cur) {
res[cur] = max(res[cur << 1], res[cur << 1 | 1]);
}
void Build(int cur, int l, int r) {
if (l == r) {
res[cur] = w;
return;
}
int mid = (l + r) >> 1;
Build(Lson);
Build(Rson);
PushUp(cur);
}
int Query(int val, int cur, int l, int r) {
if (l == r) {
res[cur] -= val;
return l;
}
int ret = 0;
int mid = (l + r) >> 1;
if (res[cur << 1] >= val) ret = Query(val, Lson);
else ret = Query(val, Rson);
PushUp(cur);
return ret;
}
int main() {
while (scanf("%d%d%d", &h, &w, &n) == 3) {
h = min(h, n);
Build(1, 1, h);
while (n--) {
int val; SF(val);
//printf("res[1] = %d\n", res[1]);
if (res[1] < val) printf("-1\n");
else PF(Query(val, 1, 1, h));
}
}
return 0;
}