#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200111;
const int INF = 0x7f7f7f7f;
int cases;
int num[MAXN], tot;
map<int, int> mp1, mp2;
bool ans[MAXN];
int main() {
  int n, m, p, x;
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &num[i]);
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d", &x);
    mp2[x]++;
  }
  if (m - 1 > (n - 1) / p) {
    puts("0");
    return 0;
  }
  for (int i = 1; i <= p; i++) {
    queue<int> Q;
    mp1.clear();
    for (int j = i; j <= n; j += p) {
      Q.push(j);
      mp1[num[j]]++;
      if (Q.size() == m) {
        if (mp1 == mp2) {
          ans[Q.front()] = 1;
          ++tot;
        }
        if (--mp1[num[Q.front()]] == 0) {
          mp1.erase(num[Q.front()]);
        }
        Q.pop();
      }
    }
  }
  printf("%d\n", tot);
  for (int i = 1; i <= n; i++) {
    if (ans[i]) {
      printf("%d ", i);
    }
  }
  puts("");
}
