#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("airport1.in");
ifstream fout("airport1.ans");
int main(){
int n,m1,m2,a1,b1,a2,b2,gn[1000]={0},gw[1000]={0},hb[100]={0},js=0,lqs,out;
bool gnt[100][1000]={0},gwt[100][1000]={0},lq=0;//定义廊桥空位
cin>>n>>m1>>m2;
//fin>>n>>m1>>m2;fout>>out;
for(int i=1;i<=m1;i++){//输入国内数据
cin>>a1>>b1;
//fin>>a1>>b1;
gn[a1]=b1;
}
for(int i=1;i<=m2;i++){//输出国外数据
cin>>a2>>b2;
//fin>>a2>>b2;
gw[a2]=b2;
}
for(int i=0;i<=n;i++){//分配国内廊桥
int j=n-i; //分配国外廊桥
//cout<<'\n';
if(i!=0){ //处理国外数据
for(int q=1;q<=1000;q++){
if(gn[q]!=0){
lq=0;
for(int t=1;t<=i;t++){
lqs=t;lq=0;js=0;
for(int w=q;w<=gn[q];w++){
if(gnt[t][w]==1){
lq=1;
break;
}
else js++;
if(js==gn[q]-q+1) break;
}
if(js==gn[q]-q+1) break;
}
if(lq==1) continue;
if(lq==0){
hb[i]++;
//cout<<q<<" "<<gn[q]<<'\n';
for(int e=q;e<=gn[q];e++){
gnt[lqs][e]=1;
}
}
}
}
}
if(j!=0){ //处理国外数据
for(int q=1;q<=1000;q++){
if(gw[q]!=0){
lq=0;
for(int t=1;t<=j;t++){
lqs=t;lq=0;js=0;
for(int w=q;w<=gw[q];w++){
if(gwt[t][w]==1){
lq=1;
break;
}
else js++;
if(js==gw[q]-q+1) break;
}
if(js==gw[q]-q+1) break;
}
if(lq==1) continue;
if(lq==0){
hb[i]++;
//cout<<q<<" "<<gw[q]<<'\n';
for(int e=q;e<=gw[q];e++){
gwt[lqs][e]=1;
}
}
}
}
}
for(int r=1;r<=n;r++){//重置廊桥数据
for(int y=1;y<=1000;y++){
gnt[r][y]=0;
gwt[r][y]=0;
}
}
}
int end=0;
for(int i=1;i<=n;i++){
if(hb[i]>end) end=hb[i];
}
cout<<end;
//cout<<'\n'<<out;
return 0;
}