#include <iostream>
#include <unordered_map>
#include <map>
#include <climits>
using namespace std;
template <class T>
class FenwickTree{
private:
unordered_map<long long, T> v;
long long ma;
long long mi;
public:
FenwickTree(int max = INT_MAX, int min = 1) : ma(max), mi(min-1L) {}
void set(long long i, T d){
if(i<=mi||i>ma) throw "bad_allocation";
i -= mi;
while(i<=ma-mi){
v[i] += d;
i += i&-i;
}
}
T get(long long i){
if(i<=mi) return 0;
if(i>ma) i = ma;
i -= mi;
T x = NULL;
while(i){
x += v[i];
i -= i&-i;
}
return x;
}
};
class PrefixSum{
private:
map<int, int> v;
public:
void set(int i, int d){
v[i] += d;
}
int get(int i){
int x = 0;
for(auto p: v)
if(p.first>i) break;
else x += p.second;
return x;
}
};
int main() {
int n,q,p;
cin>>n>>q>>p;
p %= 101; // p: should be a percentage
FenwickTree<int> ft(n,1);
PrefixSum ps;
int i,d;
while(q--){
i = 1+rand()%n;
d = rand()%100;
if(d<p){
if(ft.get(i)!=ps.get(i))
cout<<"Mismatch at i = "<<i<<" q = "<<q<<endl;
}
else{
d = rand()%100;
ft.set(i,d);
ps.set(i,d);
}
}
if(ft.get(n)!=ps.get(n))
cout<<"Final query mismatch"<<endl;
else
cout<<"Comparison finished"<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGNsaW1pdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBGZW53aWNrVHJlZXsKcHJpdmF0ZToKICAgIHVub3JkZXJlZF9tYXA8bG9uZyBsb25nLCBUPiB2OwogICAgbG9uZyBsb25nIG1hOwogICAgbG9uZyBsb25nIG1pOwpwdWJsaWM6CiAgICBGZW53aWNrVHJlZShpbnQgbWF4ID0gSU5UX01BWCwgaW50IG1pbiA9IDEpIDogbWEobWF4KSwgbWkobWluLTFMKSB7fQogICAgdm9pZCBzZXQobG9uZyBsb25nIGksIFQgZCl7CiAgICAgICAgaWYoaTw9bWl8fGk+bWEpIHRocm93ICJiYWRfYWxsb2NhdGlvbiI7CiAgICAgICAgaSAtPSBtaTsKICAgICAgICB3aGlsZShpPD1tYS1taSl7CiAgICAgICAgICAgIHZbaV0gKz0gZDsKICAgICAgICAgICAgaSArPSBpJi1pOwogICAgICAgIH0KICAgIH0KICAgIFQgZ2V0KGxvbmcgbG9uZyBpKXsKICAgICAgICBpZihpPD1taSkgICByZXR1cm4gMDsKICAgICAgICBpZihpPm1hKSAgICBpID0gbWE7CiAgICAgICAgaSAtPSBtaTsKICAgICAgICBUIHggPSBOVUxMOwogICAgICAgIHdoaWxlKGkpewogICAgICAgICAgICB4ICs9IHZbaV07CiAgICAgICAgICAgIGkgLT0gaSYtaTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHg7CiAgICB9Cn07CmNsYXNzIFByZWZpeFN1bXsKcHJpdmF0ZToKICAgIG1hcDxpbnQsIGludD4gdjsKcHVibGljOgogICAgdm9pZCBzZXQoaW50IGksIGludCBkKXsKICAgIAl2W2ldICs9IGQ7CiAgICB9CiAgICBpbnQgZ2V0KGludCBpKXsKICAgIAlpbnQgeCA9IDA7CiAgICAJZm9yKGF1dG8gcDogdikKICAgIAkJaWYocC5maXJzdD5pKQlicmVhazsKICAgIAkJZWxzZQl4ICs9IHAuc2Vjb25kOwogICAgCXJldHVybiB4OwogICAgfQp9OwppbnQgbWFpbigpIHsKCWludCBuLHEscDsKCWNpbj4+bj4+cT4+cDsKCXAgJT0gMTAxOwkvLyBwOiBzaG91bGQgYmUgYSBwZXJjZW50YWdlCglGZW53aWNrVHJlZTxpbnQ+IGZ0KG4sMSk7CglQcmVmaXhTdW0gcHM7CglpbnQgaSxkOwoJd2hpbGUocS0tKXsKCQlpID0gMStyYW5kKCklbjsKCQlkID0gcmFuZCgpJTEwMDsKCQlpZihkPHApewoJCQlpZihmdC5nZXQoaSkhPXBzLmdldChpKSkKCQkJCWNvdXQ8PCJNaXNtYXRjaCBhdCBpID0gIjw8aTw8IiBxID0gIjw8cTw8ZW5kbDsKCQl9CgkJZWxzZXsKCQkJZCA9IHJhbmQoKSUxMDA7CgkJCWZ0LnNldChpLGQpOwoJCQlwcy5zZXQoaSxkKTsKCQl9Cgl9CglpZihmdC5nZXQobikhPXBzLmdldChuKSkKCQljb3V0PDwiRmluYWwgcXVlcnkgbWlzbWF0Y2giPDxlbmRsOwoJZWxzZQoJCWNvdXQ8PCJDb21wYXJpc29uIGZpbmlzaGVkIjw8ZW5kbDsKCXJldHVybiAwOwp9