#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
map<int, int> g, lim;
int a[maxn], b[maxn], q[maxn];
int n, m, k, ans, tot, l, t;
long long p;
void init() {
  scanf("%d%d%I64d", &n, &m, &p);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  for (int i = 0; i < m; i++) {
    scanf("%d", &b[i]);
    g[b[i]]++;
    lim[b[i]]++;
  }
  tot = m;
}
void solve() {
  for (int i = 0; i < p; i++) {
    if (i + (m - 1) * p >= n) continue;
    l = -1;
    for (int j = 0; j < m; j++)
      if (i + j * p < n) {
        k = a[i + j * p];
        t = g[k]--;
        if (t > 0) tot--;
      } else
        break;
    if (!tot) q[++ans] = i;
    for (int j = m; i + j * p < n; j++) {
      k = a[i + (j - m) * p];
      l = j - m;
      t = ++g[k];
      if (t > 0 && t <= lim[k]) tot++;
      k = a[i + j * p];
      t = g[k]--;
      if (t > 0) tot--;
      if (!tot) q[++ans] = i + (j - m + 1) * p;
    }
    for (int j = l + 1; i + j * p < n; j++) {
      k = a[i + j * p];
      t = ++g[k];
      if (t > 0 && t <= lim[k]) tot++;
    }
  }
}
int main() {
  init();
  solve();
  sort(q + 1, q + ans + 1);
  printf("%d\n", ans);
  for (int i = 1; i < ans; i++) printf("%d ", q[i] + 1);
  if (ans) printf("%d\n", q[ans] + 1);
  return 0;
}
