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

#pragma GCC optimize("O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define getchar_unlocked getchar

int A[100005];
int B[100005];
int offset[100005];
int minLevel1[100005];
int minLevel2[100005];
int N, L;

inline int nextInt(){
    int x=0;
    char ch=0;
    do{
        ch=getchar_unlocked();
    }while(ch<'0'||ch>'9');
    while(ch>='0'&&ch<='9'){
        x=10*x+(ch-'0');
        ch=getchar_unlocked();
    }
    return x;
}

int main(){
    N = nextInt();
    L = nextInt();
    for(int i = 1; i <= N; i ++){
        A[i] = nextInt();
        offset[i] = A[i]-i;
    }
    for(int i = 1; i <= N; i ++){
        B[i] = nextInt();
    }

    for(int i = 1; i <= N; i ++){
        minLevel1[i] = 0;
        minLevel2[i] = 0;
        //printf("offset[%d]=%d\n", i, offset[i]);
    }

    long long ans = 0;
    int lo = 1;
    int hi2 = 1;
    for(int i = 1; i <= N; i ++){
        if(A[i] == B[i]){continue;}
        if(B[i] == i || B[i] == L-N+i){
            ans ++;
        }else{
            while(lo < N+2 && offset[lo] < B[i]-i){
                lo ++;
            }

            if((lo == N+2) || (offset[lo] != B[i]-i)){
                printf("-1");
                return 0;
            }

            while(hi2 < N+2 && offset[hi2] <= B[i]-i){
                hi2 ++;
            }

            int hi = hi2-1;
            //int hi = upper_bound(offset+1, offset+(1+N), B[i]-i) - offset - 1;

            if(lo > i){
                minLevel2[lo] = max(minLevel2[lo], lo - i);
            }else{
                minLevel1[hi] = max(minLevel1[hi], i - hi);
            }

            //printf("i=%d [%d, %d]\n", i, lo, hi);
            //ans += min(abs(lo - i), abs(hi - i));
        }
    }

    for(int i = 1; i <= N; i ++){
        ans += minLevel1[i] + minLevel2[i];
    }

    printf("%lld\n", ans);
    return 0;
}

#include<bits/stdc++.h>
////////////////////////////dbug/////////////////////////////////////////////////////////////////////////
#define dbug(a) cerr<<"==> "<<a<<endl;
#define dbug_ok cerr<<"==> ok"<<endl;
#define dbug_2d(a,n,m) {cerr<<"********"<<endl;for(int i=0;i<n;i++){for(int j=0;j<m;j++)cerr<<a[i][j]<<" "; cerr<<endl;}cerr<<"********"<<endl; }
#define dbug_1d(a,n) {cerr<<"********"<<endl;for(int i=0;i<n;i++)cerr<<a[i]<<" "; cerr<<endl;cerr<<"********"<<endl;}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////fill//////////////////////////////////////////////////////////////////////////
#define fill(a,n) memset(a,n,sizeof(n))
#define fill_2d(a,n,m,v) {for(int i=0;i<n;i++)for(int j=0;j<m;j++)a[i][j]=v;}
#define fill_3d(a,n,m,l,v) {for(int i=0;i<n;i++)for(int j=0;j<m;j++)for(int k=0;k<l;k++)a[i][j][k]=v;}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////loops/////////////////////////////////////////////////////////////////////////
#define fr(i,n) for(int i=0;i<n;i++)
#define fi(i,l,r) for(int i=l;i<=r;i++)
#define frfr(i,n,j,k) for(int i=0;i<n;i++)for(int j=0;j<k;j++)
#define fifi(i,l,r,j,l1,r1) for(int i=l;i<=r;i++)for(int j=l1;j<=r1;j++)
/////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////types////////////////////////////////////////////////////////////////////////
#define ll long long
#define pp pair<int,int>
#define pll pair<ll,ll>
#define T1 first
#define T2 second
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////print///////////////////////////////////////////////////////////////////////
#define _YES puts("YES")
#define _Yes puts("Yes")
#define _yes puts("yes")
#define _no puts("no")
#define _No puts("No")
#define _NO puts("NO")
/////////////////////////////////////////////////////////////////////////////////////////////////////////

using namespace std;



void solve()
{
	ll c,n,t,a,b,s=0,p=0,an=1;
	cin>>c>>n>>t;
	s=c;
	while(n--)
	{cin>>a>>b;
		s-=(a-p);
		if(s<=0){an=0;}
		s=min(s+(b-a),c);
		p=b;
		}
		dbug(p);
		dbug(s);
		s-=(t-p);dbug(s);
	if(s<=0){an=0;}
		an?_Yes:_No;
}

int main()
{
	cin.tie(nullptr);
    ios::sync_with_stdio(false);
    solve();
   
}
