#include <bits/stdc++.h>
using namespace std;
long long a[2000005], b[2000005], c[2000005], i, m, ans, k, l, j, q, x, n, ma,
    mi, p, qq;
vector<int> v;
string s;
map<int, int> mp, mp1;
void check(int t) {
  j = 0;
  if (k == 0) {
    v.push_back(t + 1);
  }
  if (t + (m)*p >= n) {
    for (int i = t; i < n; i += p) mp[a[i]]--;
    return;
  }
  if (mp[a[t]] == 0) k++;
  mp[a[t]]--;
  if (mp[a[t + (m)*p]] == -1) k--;
  mp[a[t + (m)*p]]++;
}
int main() {
  cin >> n >> m >> p;
  for (i = 0; i < n; i++) scanf("%d", &a[i]);
  for (i = 0; i < m; i++) scanf("%d", &b[i]);
  int K = 0;
  for (int i = 0; i < m; i++) {
    if (!mp[b[i]]) K++;
    mp[b[i]]--;
  }
  for (qq = 0; qq < p; qq++) {
    k = K;
    for (int i = qq; i <= qq + (m - 1) * p && i < n; i += p) {
      if (mp[a[i]] == -1) k--;
      mp[a[i]]++;
    }
    int w = 0;
    q = qq;
    while (p * (m - 1) + q < n) check(q), q += p;
  }
  sort(v.begin(), v.end());
  cout << v.size() << endl;
  for (i = 0; i < v.size(); i++) printf("%d ", v[i]);
}
