#include<bits/stdc++.h>
using namespace std;
typedef  long long  ll;
ll inf=1000000000000000000,mod=1000000007;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
    #endif
    ll h,w,n,m;cin>>h>>w>>n>>m;
    ll vis[h][w],dp[h][w],ans=0,a,b;
    for(ll i=0;i<h;i++)for(ll j=0;j<w;j++)vis[i][j]=0;
    for(ll i=0;i<n;i++)cin>>a>>b,vis[a-1][b-1]=1;
    for(ll i=0;i<m;i++)cin>>a>>b,vis[a-1][b-1]=2;
    ll flg;
    // for(ll i=0;i<h;i++)
    for(ll i=0;i<h;i++){
        flg=1;
        for(ll j=0;j<w;j++){
            dp[i][j]=0;
            if(vis[i][j]==1)flg=0;
            else if(vis[i][j]==2)flg=1;
            if(!flg)
            dp[i][j]=1;
        }
    }

    for(ll i=0;i<h;i++){
        flg=1;
        for(ll j=w-1;j>=0;j--){
            if(vis[i][j]==1)flg=0;
            else if(vis[i][j]==2)flg=1;
            if(!flg)
            dp[i][j]=1;
        }
    }

    for(ll j=0;j<w;j++){
        flg=1;
        for(ll i=0;i<h;i++){
            if(vis[i][j]==1)flg=0;
            else if(vis[i][j]==2)flg=1;
            if(!flg)
            dp[i][j]=1;
        }
    }

    for(ll j=0;j<w;j++){
        flg=1;
        for(ll i=h-1;i>=0;i--){
                if(vis[i][j]==1)flg=0;
                else if(vis[i][j]==2)flg=1;
                if(!flg)
                dp[i][j]=1;
        }
    }
    for(ll i=0;i<h;i++)for(ll j=0;j<w;j++)if(dp[i][j])ans++;
    cout<<ans<<endl;
}

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

//---------------- 定数 ----------------

// [X_MIN, X_MAX], [Y_MIN, Y_MAX]
#define X_MIN 0
#define X_MAX 29 
#define Y_MIN 0
#define Y_MAX 29

#define QUERY 1000


// -------- util function --------

int rand_int(){
	static unsigned long long x=123456789, y=362436069, z=521288629, w=88675123; 
	unsigned long long t = (x^(x << 11));
	x=y; y=z; z=w;
	return (w=(w^(w>>19))^(t^(t>>8)));
}

// -------------------------------


// 座標(y, x)を扱うクラス
struct Point{
	int x, y;

	//Point(int y, int x): x(x), y(y);
};

struct Query{
	Point start, end;
	string ans;

	// クエリを開始する処理
	void init(){
		cin >> start.y >> start.x >> end.y >> end.x;
	}

	// クエリの答えを出力する処理
	void submit(){
		int point;
		cout << ans << endl;
		cin >> point;
		return;
	}

	void solve(){
		Point now = start;

		while(now.y != end.y || now.x != end.x){
			int flag = -1;
			if(now.y == end.y) flag = 1;
			if(now.x == end.x) flag = 0;
			if(flag == -1) flag = rand_int() % 2;

			if(flag == 0){
				if(now.y < end.y){
					ans.push_back('D');
					now.y++;
				}else{
					ans.push_back('U');
					now.y--;
				}
			}else{
				if(now.x < end.x){
					ans.push_back('R');
					now.x++;
				}else{
					ans.push_back('L');
					now.x--;
				}
			}
		}
	}
};

int main(){
	for(int q = 0;q < QUERY;q++){
		Query query;
		query.init();
		query.solve();
		query.submit();
	}
	return 0;
}
