#include <bits/stdc++.h>
using namespace std;
const int N = 200000 + 5;
struct node {
  int u;
  int v;
  int num;
};
int n, a, b, k;
int cnt;
int tot;
int all;
int pos[N];
char str[N];
node edge[N];
vector<int> ans;
void Read() {
  cnt = 0;
  scanf(" %s", str);
  int len = strlen(str);
  for (int i = 0; i < len; i++) {
    if (str[i] == '1') {
      pos[++cnt] = i + 1;
    }
  }
}
void Calc() {
  tot = 0;
  all = 0;
  int tmp = pos[1] - 1;
  if (tmp >= b) {
    edge[++tot].u = 1;
    edge[tot].v = tmp;
    edge[tot].num = tmp / b;
    all += tmp / b;
  }
  for (int i = 2; i <= cnt; i++) {
    int tmp = pos[i] - pos[i - 1] - 1;
    if (tmp >= b) {
      edge[++tot].u = pos[i - 1] + 1;
      edge[tot].v = pos[i] - 1;
      edge[tot].num = tmp / b;
      all += tmp / b;
    }
  }
  tmp = n - pos[cnt];
  if (tmp >= b) {
    edge[++tot].u = pos[cnt] + 1;
    edge[tot].v = n;
    edge[tot].num = tmp / b;
    all += tmp / b;
  }
}
void Solve() {
  ans.clear();
  int flag = all - a + 1;
  printf("%d\n", flag);
  int sum = 0;
  for (int i = 1; i <= tot; i++) {
    if (sum == flag) break;
    int tmp = edge[i].u;
    for (int j = 0; j < edge[i].num; j++) {
      tmp += (b - 1);
      if (tmp > edge[i].v) tmp = edge[i].v;
      ans.push_back(tmp);
      sum++;
      if (sum == flag) break;
      tmp += 1;
    }
  }
}
void Print() {
  int len = (int)ans.size();
  for (int i = 0; i < len; i++) {
    if (i) printf(" ");
    printf("%d", ans[i]);
  }
  puts("");
}
int main() {
  while (~scanf("%d%d%d%d", &n, &a, &b, &k)) {
    Read();
    Calc();
    Solve();
    Print();
  }
  return 0;
}
