#include <bits/stdc++.h>
using namespace std;
int max(int a, int b) { return a > b ? a : b; }
int min(int a, int b) { return a < b ? a : b; }
struct node {
  int space, pos;
  node() {}
  node(int s, int p) {
    space = s;
    pos = p;
  }
};
int n, m, k, ans, tmp;
int a;
vector<node> v[101000];
int main() {
  while (scanf("%d%d%d", &n, &m, &k) != EOF) {
    int i, j, l, len;
    for (i = 0; i <= m; i++) v[i].clear();
    for (i = 0; i < n; i++) {
      scanf("%d", &a);
      len = v[a].size();
      if (len == 0)
        v[a].push_back(node(0, i));
      else
        v[a].push_back(
            node(v[a][len - 1].space + i - v[a][len - 1].pos - 1, i));
    }
    ans = 0;
    for (i = 1; i <= m; i++) {
      len = v[i].size();
      l = 0;
      for (j = 0; j < len; j++) {
        tmp = v[i][j].space + k;
        for (; l < len; l++) {
          if (v[i][l].space > tmp) break;
        }
        ans = max(ans, l - j);
      }
    }
    printf("%d\n", ans);
  }
}
