#include <bits/stdc++.h>

#define N 200'000

std::string x = "1";

auto apply_changes(std::string& s, const size_t l, const size_t r) {
	for (size_t i = l - 1; i < r; ++i) {
		s[i] = s[i] == '1' ? '0' : '1';
	}
}

template<class Iter>
auto eval_podniz(const std::string& s, const Iter prvi, const Iter zadnji, const size_t c) -> size_t {
	if (prvi == zadnji) {
		return static_cast<size_t>(INFINITY);
	}
	const size_t kecevi = std::count(prvi, zadnji + 1, '1');
	const size_t nule = std::count(prvi, zadnji + 1, '0');

	// std::printf("Kecevi, nule: %llu, %llu\n", kecevi, nule);
	// std::printf("Counti: %llu %llu", std::count(begin(s), prvi, '1'), std::count(zadnji + 1, end(s), '1'));
	const size_t rezultat = c + nule + std::count(begin(s), prvi, '1') + std::count(zadnji + 1, end(s), '1');
	// std::printf("Rezultat: %llu\n", rezultat);

	const auto drugi = std::find(prvi + 1, zadnji, '1');
	const auto predzadnji = std::find_end(prvi, zadnji, begin(x), end(x));

	const auto r1 = eval_podniz(s, drugi, zadnji, c);
	const auto r2 = eval_podniz(s, prvi, predzadnji, c);
	// std::printf("R1 i R2: %llu %llu\n", r1, r2);

	return std::min(rezultat, std::min(r1, r2));
}

auto min_cost(const std::string& s, const size_t c) -> size_t {
	const size_t trivijalno = std::count(begin(s), end(s), '1');


	const auto prvi = std::find(begin(s), end(s), '1');
	const auto zadnji = std::find_end(begin(s), end(s), begin(x), end(x));

	return std::min(trivijalno, eval_podniz(s, prvi, zadnji, c));
}

auto main() -> int {
	std::ios_base::sync_with_stdio(false);

	size_t n, c, q;
	std::cin >> n >> c >> q;
	
	std::string s;
	std::cin >> s;

	for (size_t i = 0; i < q; ++i) {
		size_t l, r;
		std::cin >> l >> r;
		apply_changes(s, l, r);
		std::cout << min_cost(s, c) << '\n';
	}
}