#include <bits/stdc++.h>
int mox[8] = {1, -1, 0, 0, 1, -1, 1, -1};
int moy[8] = {0, 0, 1, -1, -1, -1, 1, 1};
char mover[4] = {'D', 'U', 'R', 'L'};
const long long INF = 1LL << 61;
const int inf = 2e9;
const long double PI = acos(-1);
bool debug;
using namespace std;
void solve();
int main() {
  debug = 0;
  cout.precision(30);
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  solve();
}
const int N = 200005;
const int lg = 20;
vector<pair<int, int> > bl;
vector<pair<int, int> > can;
vector<int> res;
int n, a, b, k;
string s;
void solve() {
  cin >> n >> a >> b >> k >> s;
  if (n == 1) {
    cout << 1 << endl << 1 << endl;
    return;
  }
  bl.push_back({0, -1});
  for (int i = 0; i < n; i++)
    if (s[i] == '0')
      bl[(int)bl.size() - 1].second = i;
    else {
      if (bl[(int)bl.size() - 1].second == -1) bl.pop_back();
      bl.push_back({i + 1, -1});
    }
  if (s[n - 1] == '1') bl.pop_back();
  int all = 0;
  for (int i = 0; i < (int)bl.size(); i++) {
    int l = bl[i].first, r = bl[i].second;
    int canbe = (r - l + 1) / b;
    all += canbe;
    if (canbe == 0) continue;
    can.push_back({canbe, i});
  }
  sort(can.begin(), can.end());
  for (int i = 0; i < (int)can.size(); i++) {
    int l = bl[can[i].second].first, r = bl[can[i].second].second;
    int st_pos = l + b - 1;
    for (int j = 0; j < can[i].first && all >= a; j++) {
      res.push_back(st_pos + 1);
      st_pos += b;
      all--;
    }
  }
  cout << (int)res.size() << endl;
  for (int i = 0; i < (int)res.size(); i++) cout << res[i] << " ";
  cout << endl;
}
