#include using namespace std; #define rep(i,n) for(int i=0;i=0;--i) #define debug(output) if(debugFlag)cout<<#output<<"= "< P; const bool debugFlag=true; const lint linf=1.1e18;const int inf=1.01e9; constexpr int MOD=1000000007; templatebool chmax(T &a, const T &b) { if(a <= b){ a = b; return 1; } return 0; } templatebool chmin(T &a, const T &b) { if(a > b){ a = b; return 1; } return 0; } void solve(vector& a,vector& b,int k){ int n=a.size();int m=b.size(); map> mp; rep(i,m)mp[b[i]%k].insert(b[i]); lint res=0; sort(a.begin(),a.end()); rep(i,n){ auto v=mp[a[i]%k]; auto it=v.lower_bound(a[i]); int mn=inf; if(it!=v.end())chmin(mn,(*it-a[i])/k); if(it!=v.begin()){ --it; if(chmin(mn,(a[i]-*(it))/k))v.erase(it); else{ ++it; if(it!=v.end())v.erase(it); } } res+=mn; } if(res>=inf)res=-1; cout<>n>>m>>k; vector a(n),b(m); rep(i,n)cin>>a[i]; rep(i,m)cin>>b[i]; if(n>m)swap(a,b); solve(a,b,k); return 0; }