#include<algorithm>
#include<queue>
#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
const int N = 5e4 + 15;
int a[N];
int main()
{
	int n, m, q;

	while (cin >> n >> m >> q)
	{
		queue<int> v[N];
		for (int i = 1; i <= q; i++)
		{
			cin >> a[i];
			v[a[i]].push(i); // 把 记录 坐标
		}
		set<int> s;		// s  容器可当作题目中的内存
		int ans = 0;
		for (int i = 1; i <= q; i++)
		{
			// 内存中原本就有a[i] 
			if (s.count(a[i]))
			{
				v[a[i]].pop();
				continue;
			}
			if (s.size()<n)
			{//如果内存中有空位,直接将 a[i] 加入道内存中 
				s.insert(a[i]);
				v[a[i]].pop();
			}
			else
			{//如果内存中没有空位 
				int l, maxx = 0;
				bool st = false;
				for(auto it : s)
				{//遍历 内存中的元素
					if (v[it].empty())
					{//如果内存中某一个元素 在此后不会再被请求,就把这个元素给替换掉
                     //也可能不存在这种情况
						s.erase(it);
						s.insert(a[i]);
						v[a[i]].pop();
						st = true;
						break;
					}
					else
					{//如果不存在上边的情况,就看哪个元素在下次请求的时间最靠后,
                     //就替换哪个元素
						if (maxx < v[it].front())
						{//maxx 记录下次请求最靠后的元素, l 记录该元素的值
							maxx = v[it].front();
							l = it;
						}
					}
				}
				if (!st)
				{
					s.erase(l);
					s.insert(a[i]);
					v[a[i]].pop();
				}
			}
			ans ++;
		}
		cout << ans << endl;
	}
	return 0;
}