#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
long long n, m, p;
int a[MAXN], b[MAXN];
set<int> ans;
map<int, int> mp;
void add(int x) {
  mp[x]++;
  if (mp[x] == 0) mp.erase(x);
}
void rem(int x) {
  mp[x]--;
  if (mp[x] == 0) mp.erase(x);
}
int main() {
  cin >> n >> m >> p;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int j = 1; j <= m; j++) cin >> b[j];
  for (int i = 1; i <= p; i++)
    if (i + (m - 1) * p <= n) {
      mp.clear();
      for (int j = 1; j <= m; j++) mp[b[j]]--;
      for (int j = 0; j < m; j++) add(a[i + p * j]);
      if (mp.empty()) ans.insert(i);
      for (int j = i + m * p; j <= n; j += p) {
        rem(a[j - m * p]);
        add(a[j]);
        if (mp.empty()) ans.insert(j - (m - 1) * p);
      }
    }
  cout << ans.size() << '\n';
  for (set<int>::iterator it = ans.begin(); it != ans.end(); it++)
    cout << *it << (*it == *ans.rbegin() ? '\n' : ' ');
}
