#include <iostream>
#include <cstring>
using namespace std;
#define maxs 1000000000;
int maxspa;
struct point
{
int l,r,spa;
}floor[810000];//floor[x]指层数
void buildtree(int L,int R,int st)
{
floor[st].l=L,floor[st].r=R,floor[st].spa=maxspa;
if(L==R)return ;
int mid=(L+R)>>1;
buildtree(L,mid,st<<1);
buildtree(mid+1,R,st<<1+1);
}
void add(int sp,int st)
{
if(floor[st].l==floor[st].r)
{
cout<<st<<endl;
floor[st].spa=floor[st].spa-sp;
return ;
}
int m;
if(floor[st<<1].spa>=sp)
{add(sp,st<<1);m=floor[st<<1].spa;}
else
{add(sp,st<<1+1);m=floor[st<<1+1].spa;}
floor[st].spa=max(floor[st].spa,m);
}
int main()
{
int h,w,n,t;
while(cin>>h>>w>>n)
{
maxspa=w;
buildtree(1,h,1);
while(n--)
{
cin>>t;
if(floor[1].spa>=t)
add(t,1);
else
cout<<-1<<endl;
}
}
return 0;
}