#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;
}