#include <iostream>
#include <set>
#include <algorithm>
#include <assert.h>
using namespace std;

struct interv
{
	int x, y;
};

bool cmp(interv A, interv B)
{
	return A.x<B.x;
}

interv a[1001];
int d, n, m, ds[1001], i, j, sx, sy, seturi;
set<int> st[1001], staux, st2,stfin[1001];
set<int>::iterator it, it2, it3;
int main()
{
	cin>>d>>n>>m;
	for(i=1; i<=n; i++)
	{
		cin>>ds[i];
	}
	for(i=1; i<=m; i++)
	{
		cin>>a[i].x>>a[i].y;
	}
	
	sort(a+1, a+m+1, cmp);
	for(i=1; i<=m; i++)
	{
		for(j=1; j<=n; j++)
		{
			if(ds[j]>=a[i].x && ds[j]<=a[i].y)
			{
				st[i].insert(ds[j]);
			}
		}
	}
	for(i=1; i<=m; i++)
	{
		staux.clear();
		st2.clear();
		for(it=st[i].begin(); it!=st[i].end(); it++)
		{
			staux.insert((*it));
		}
		st2.insert(i);
		sx=a[i].x;
		sy=a[i].y;
		for(j=i+1; j<=m; j++)
		{
			if(sy<a[j].x)
			{
				for(it=st[j].begin(); it!=st[j].end(); it++)
				{
					staux.insert((*it));
				}
				st2.insert(j);
				sx=a[j].x;
				sy=a[j].y;
			}
			if(staux.size()==n)
			{
				seturi++;
				stfin[seturi]=st2;
			}
		}
	}
	int nrinit, minim=99999;
	for(i=1; i<=seturi; i++)
	{
		nrinit=stfin[i].size();
		for(it=stfin[i].begin(); it!=stfin[i].end();it++)
		{
			//daca e redundant, il scoatem
			int act=(*it);
			staux.clear();
			for(it2=stfin[i].begin(); it2!=stfin[i].end(); it2++)
			{
				int act2=(*it2);
				if(act2!=act)
				{
					for(it3=st[act2].begin(); it3!=st[act2].end(); it3++)
					{
						staux.insert((*it3));
					}
				}
			}
			if(staux.size()==n)
			{
				nrinit--;
				stfin[i].erase(act);
			}
		}
		if(nrinit<minim)
			minim=nrinit;
	}
	cout<<minim;
}