#include <bits/stdc++.h>
using namespace std;
map<int, int> A, B;
int n, m, p;
int a[200005];
vector<int> ans;
void input() {
  cin >> n >> m >> p;
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  int t;
  for (int i = 0; i < m; i++) {
    scanf("%d", &t);
    B[t]++;
  }
}
void sub(int x) {
  A[x]--;
  if (A[x] == 0) A.erase(x);
}
int main() {
  input();
  if (m - 1 > (n - 1) / p) {
    printf("0\n");
    return 0;
  }
  for (int i = 0; i < p; i++) {
    A.clear();
    for (int j = 0; j < m - 1; j++) {
      A[a[i + j * p]]++;
    }
    for (int j = i; j + (m - 1) * p < n; j += p) {
      if (j > i) sub(a[j - p]);
      A[a[j + (m - 1) * p]]++;
      if (A == B) ans.push_back(j + 1);
    }
  }
  sort(ans.begin(), ans.end());
  int sz = ans.size();
  printf("%d\n", sz);
  if (sz) {
    printf("%d", ans[0]);
    for (int i = 1; i < sz; i++) printf(" %d", ans[i]);
    printf("\n");
  }
  return 0;
}
