Problem: Example

Input

2 2 7
3 4
3 2
1 3
1 1
2 2
1 2
2 1
1 2
2 2
1 1


Output

5

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
using namespace std;

int main(){
    int p,r,t;
    cin>>p>>r>>t;
    vector<int> l(r);
    for(int i=0;i<r;i++) cin>>l[i];
    vector<vector<int>> n(p,vector<int>(r));
    for(int i=0;i<p;i++)for(int j=0;j<r;j++) cin>>n[i][j];

    vector<int> pv(t),rv(t);
    for(int i=0;i<t;i++) cin>>pv[i]>>rv[i],pv[i]--,rv[i]--;
    int lb=0,ub=t+1;
    
    while(ub-lb>1){
        int mid=(lb+ub)/2;
        auto rest=l;
        auto tmpn=n;
        for(int i=0;i<mid;i++){
            if(rest[rv[i]]){
                rest[rv[i]]--;
                tmpn[pv[i]][rv[i]]--;
                if(count(tmpn[pv[i]].begin(),tmpn[pv[i]].end(),0)==r){
                    tmpn[pv[i]]=n[pv[i]];
                    for(int j=0;j<r;j++) rest[j]+=n[pv[i]][j];
                }
            }
        }
        vector<int> used(p);
        int cnt=0;
        for(int loop=0;loop<p;loop++){
            for(int i=0;i<p;i++){
                if(used[i]) continue;
                bool isdead=false;
                for(int j=0;j<r;j++){
                    isdead=(isdead || rest[j]<tmpn[i][j]);
                }
                if(!isdead){
                    cnt++;
                    for(int j=0;j<r;j++){
                        rest[j]+=n[i][j]-tmpn[i][j];
                    }
                    used[i]=true;
                    break;
                }                
            }
        }
        if(cnt==p){
            lb=mid;
        }
        else{
            ub=mid;
        }
    }
    if(ub==t+1){
        cout<<-1<<endl;
    }
    else{
        cout<<lb+1<<endl;
    }


    
    return 0;
}