bool comp(const int &a,const int &b)
{
return a>b;
}
int main () {
int n,m;
cin>>n>>m;
vector<int> tang;
for (int i = 0; i<m; i++) {
int in;
cin>>in;
tang.push_back(in);
}
sort(tang.begin(), tang.end(), comp); //糖从大到小排序
map<int, int> index;
for (int i = 0; i<n; i++) { //用map存熊的战斗力和饿的值,由于map从小到大,所以对战斗力取负值
int xiong,ji;
cin>>xiong>>ji;
index[-1 * xiong] = ji;
}
map<int, int> :: iterator chi = index.begin();
for(; chi != index.end(); chi++) { //熊的战斗力从大到小吃糖
for(int i = 0; i<m; i++) {
if (tang[i] != 0 && chi->second >= tang[i]) {
chi->second -= tang[i];
tang[i] = 0; //吃过的糖为0
}
}
cout<<chi->second<<endl;
}
return 0;
}