#include <bits/stdc++.h>
#define ll long long
#define ALL(x) x.begin(),x.end()
#define MOD (1000000000+7)
using namespace std;
#define PI 3.14159265359
#define tMOD 998244353
#define mkpr(x,y) make_pair(x,y)

int main(){
    ll H,W,N,M;
    cin>>H>>W>>N>>M;
    ll grid[1501][1501]={0};
    ll tmp,tmp1;
    for(ll i=0;i<N;i++){
        cin>>tmp>>tmp1;
      tmp--;tmp1--;
        grid[tmp][tmp1]=1;
    }

    for(ll i=0;i<M;i++){
        cin>>tmp>>tmp1;
      tmp--;tmp1--;
        grid[tmp][tmp1]=2;
    }
//h,w
    ll ans=0;
    for(ll h=0;h<H;h++){
        for(ll w=0;w<W;w++){
        ll tmp=0;ll nh=h,nw=w;
        //(h,w)
        //ue
        nh=h,nw=w;
        for(ll i=h;i>=0;i--){
            if(grid[i][nw]==1){
                tmp++;
                break;
            }
            else if(grid[i][nw]==2){
                break;
            }
        }

        //sita
         nh=h,nw=w;
     
        for(ll i=h;i<H;i++){
            if(grid[i][nw]==1){
                tmp++;
                break;
            }
            else if(grid[i][nw]==2){
                break;
            }
        }

        //hidari
        nh=h,nw=w;
        for(ll i=w;i>=0;i--){
            if(grid[nh][i]==1){
                tmp++;
                break;
            }
            else if(grid[nh][i]==2){
                break;
            }
        }

        //migi
        nh=h,nw=w;
        for(ll i=w;i<W;i++){
            if(grid[nh][i]==1){
                tmp++;
                break;
            }
            else if(grid[nh][i]==2){
                break;
            }
        }



        if(tmp>0){
            ans++;
        }

        }
    }
    cout<<ans<<endl;

    
}

#include <bits/stdc++.h>
using namespace std;
char str[4][30],q[20];
int cnt;
int mymap[30];
bool st[30];
bool jdg[20];
long long temp[10];
bool dfs(int s){
    if(s>cnt){
        for(int i=1;i<=3;i++){
            if(mymap[str[i][1]-'a']==0) return false;
        }
        temp[1]=temp[2]=temp[3]=0;
        for(int i=1;i<=3;i++){
            for(int j=1;str[i][j];j++){
                temp[i]=temp[i]*10+mymap[str[i][j]-'a'];
            }
        }
        return temp[1]+temp[2]==temp[3];
    }
    for(int i=0;i<=9;i++){
        if(!jdg[i]){
            mymap[q[s]-'a']=i;
            jdg[i]=true;
            if(dfs(s+1)) return true;
            jdg[i]=false;
        }
    }
    return false;
}
int main(){
    for(int i=1;i<=3;i++) scanf("%s",str[i]+1);
    for(int i=1;i<=3;i++){
        for(int j=1;str[i][j];j++){
            if(!st[str[i][j]-'a']){
                st[str[i][j]-'a']=true;
                q[++cnt]=str[i][j];
            }
        }
    }
    if(cnt>10) puts("UNSOLVABLE");
    else{
        if(dfs(1)){
            for(int i=1;i<=3;i++) cout<<temp[i]<<endl;
        }
        else puts("UNSOLVABLE");
    }
    return 0;
}