#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(a) a.begin(), a.end()
#define ff(i,a,b) for(int i=a;i<=b;i++)
#define fb(i,b,a) for(int i=b;i>=a;i--)

using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 200005;
const int inf = 1e9 + 5;

int n, c, q;
string s;

//int niz[maxn];

ll bor[4*maxn];
ll lenj[4*maxn];
void build(int v, int tl, int tr){
    if(tl == tr){
        bor[v] = s[tl] - '0';
        return;
    }
    int mid = (tl + tr) / 2;
    build(v*2,tl,mid);
    build(v*2+1,mid+1,tr);
    bor[v] = bor[v * 2] + bor[v * 2 + 1];
}
void propagate(int v, int tl, int tr){
    lenj[v] %= 2;
    if(lenj[v]){
        bor[v] = tr - tl + 1 - bor[v];
        if(tl != tr) {
            lenj[v * 2]++;
            lenj[v * 2 + 1]++;
        }
        lenj[v] = 0;
    }
}
void lazyupd(int v, int tl, int tr, int l, int r){
    propagate(v, tl, tr);
    if(tl > tr || tl > r || tr < l)return;
    if(tl >= l && tr <= r) {
        bor[v] = tr - tl + 1 - bor[v];
        if (tl != tr) {
            lenj[v * 2]++;
            lenj[v * 2 + 1]++;
        }
        return;
    }
    int mid = (tl + tr) / 2;
    lazyupd(v*2,tl,mid,l,r);
    lazyupd(v*2+1,mid+1,tr,l,r);
    bor[v] = bor[v * 2] + bor[v * 2 + 1];
}
ll kveri(int v, int tl, int tr, int l, int r){
    propagate(v, tl, tr);
    if(tl > r || l > tr)return 0;
    if(l <= tl && r >= tr)return bor[v];
    int mid = (tl + tr)/2;
    return kveri(v*2,tl,mid,l,r) + kveri(v*2+1,mid+1,tr,l,r);
}

// C = n
void subtask1(){
    build(1,1,n);
    while(q--){
        int l, r;
        cin >> l >> r;
        lazyupd(1,1,n,l,r);
        cout << bor[1] << endl;
    }
    exit(0);
}

// C = 1
//int pref01[maxn];
//int pref10[maxn];
//int kec1[maxn];
//int kec2[maxn];
//void subtask2(){
//    // bitno je 01 i 10
//    ff(i,1,n){
//        if(i == 1 && s[i] == '1'){
//            pref01[i] = 1;
//            if(kec1[pref01[i]] == 0)kec1[pref01[i]] = i;
//            continue;
//        }
//        if(s[i] == '1' && s[i - 1] == '0')pref01[i] = pref01[i - 1] + 1;
//        else pref01[i] = pref01[i - 1];
//        if(kec1[pref01[i]] == 0)kec1[pref01[i]] = i;
//    }
//    ff(i,1,n){
//        if(i == 1 && s[i] == '0'){
//            pref10[i] = 1;
//            if(kec2[pref10[i]] == 0)kec2[pref10[i]] = i;
//            continue;
//        }
//        if(s[i] == '0' && s[i - 1] == '1')pref10[i] = pref10[i - 1] + 1;
//        else pref10[i] = pref10[i - 1];
//        if(kec2[pref10[i]] == 0)kec2[pref10[i]] = i;
//    }
//    int br1 = pref01[n];
//    int br2 = pref10[n];
//    while(q--){
//        int l, r;
//        cin >> l >> r;
//        vector<int> vec1;
//        ff(i,1,br1){
//            if(kec1[i] >= l && kec1[i] <= r)vec1.pb(i);
//        }
//        vector<int> vec2;
//        ff(i,1,br2){
//            if(kec2[i] >= l && kec2[i] <= r)vec2.pb(i);
//        }
//
//    }
//}

void subtask3(){
    int l, r;
    cin >> l >> r;
    ff(i,l,r){
        if(s[i] == '0')s[i] = '1';
        else s[i] = '0';
    }
    int kec = 1;
    while(kec <= n && s[kec] == '0')kec += 1;
    int dva = n;
    while(dva >= 1 && s[dva] == '0')dva -= 1;
//    cout << "kec: " << kec << endl;
//    cout << "dva: " << dva << endl;
//    vector<array<int,3>> vec;
    vector<int> a;
    vector<int> b;
    int br = 1;
    ff(i,kec + 1,dva){
        if(s[i] == s[i - 1])br++;
        else{
//            vec.pb({s[i - 1] - '0', poz, br});
            if(s[i - 1] == '1')a.pb(br);
            if(s[i - 1] == '0')b.pb(br);
            br = 1;
        }
    }
    if(s[n] == '1')a.pb(br);
    else b.pb(br);
    int kol = 0;
    for(auto f : a){
        if(f <= c)kol += f;
        else kol += f / c + f % c;
    }
    int rez = kol;
    kol = c;
    for(auto f : b){
        if(f <= c)kol += f;
        else kol += f / c + f % c;
    }
    rez = min(rez, kol);
    cout << rez << endl;
    exit(0);
}

int main()
{
    ios::sync_with_stdio(false);
    cout.tie(nullptr);
    cin.tie(nullptr);
    cin >> n >> c >> q >> s;
    s = ' ' + s;
    if(c == n)subtask1();
//    subtask2();
    if(q == 1)subtask3();
    return 0;
}
/**

12 4 1
001000011101
1 1

7 3 1
0100100

7 1 1
0000000

5 5 4
10101 - 01 - 3, 10 - 2
1 3
01001 - 01 - 2, 10 - 2
1 5

2 5



// probati bojenje sahovski ili slicno

**/