#include #include #include #include #include using namespace std; int N,M,K; map,vector > >mp; main() { cin>>N>>M>>K; for(int i=0;i>A; if(iB,R; B.swap(it->second.first); R.swap(it->second.second); if(N>M)B.swap(R); if(B.size()>R.size()||N==M&&B.size()!=R.size()) { cout<<-1<RQ; for(int r:R)RQ.push(r); priority_queueQ; for(int b:B) { while(!RQ.empty()&&RQ.front()<=b) { Q.push(RQ.front()); RQ.pop(); } if(RQ.empty()) { ans+=(b-Q.top())/K; Q.pop(); } else if(Q.empty()) { ans+=(RQ.front()-b)/K; RQ.pop(); } else { int l=b-Q.top(),r=RQ.front()-b; if(l<=r) { ans+=l/K; Q.pop(); } else { ans+=r/K; Q.push(RQ.front()-(l-r)); RQ.pop(); } } } } cout<