#include <bits/stdc++.h>
using namespace std;
template <class T>
T sqr(T x) {
  return x * x;
}
long double pi = 3.1415926535897932384626433832795;
const int N = 2e5 + 10, lg = 31, MAXN = 1111;
long long mod = 1e9 + 7;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long _gcd(long long a, long long b, long long& x, long long& y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  long long _x1, _y1;
  long long d = _gcd(b % a, a, _x1, _y1);
  x = _y1 - (b / a) * _x1;
  y = _x1;
  return d;
}
long long binpow(long long a, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) res *= a;
    a *= a;
    n >>= 1;
    a %= mod;
    res %= mod;
  }
  return res;
}
void term_res(string res) {
  cout << res;
  exit(0);
}
int n, a, b, k;
string s;
int main() {
  cin >> n >> a >> b >> k;
  cin >> s;
  s = '1' + s;
  s += '1';
  vector<int> ans;
  int l = 0, r = 0;
  int dif_pos = 0, parts = 0;
  vector<pair<int, pair<int, int> > > vparts;
  n = s.length();
  while (l < n) {
    while (l < n && s[l] != '1') l++;
    r = l + 1;
    while (r < n && s[r] != '1') r++;
    if (r - l > 1) {
      dif_pos += (r - l - 1) / b;
      parts++;
      vparts.push_back(make_pair(r - l - 1, make_pair(l + 1, r - 1)));
    }
    l = r;
  }
  sort(vparts.begin(), vparts.end());
  for (int i = 0; i < parts; i++) {
    if (dif_pos < a) break;
    int len = vparts[i].first;
    l = vparts[i].second.first, r = vparts[i].second.second;
    for (int j = 0; j < len / b; j++) {
      ans.push_back(l + b - 1 + b * j), dif_pos -= 1;
      if (dif_pos < a) break;
    }
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << ' ';
  return 0;
}
