#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        // http://xorshift.di.unimi.it/splitmix64.c
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};

bitset<60> a[200005];
unordered_map<ll, int, custom_hash> h, f;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
    int n,m,p; cin >> n >> m >> p;
    for(int i=0;i<n;i++){
        cin >> a[i];
    }

    pair<int, string> ans({0,string(60,'0')});
    for(int it = 0; it<10; it++){
        int ind = rng()%n;

        h.clear();
        f.clear();
        for(int i=0;i<n;i++){
            h[(a[ind]&a[i]).to_ullong()]++;
        }
        
        ll cur = a[ind].to_ullong();
        for(ll i = cur; i > 0; i = (i-1) & cur)
            f[i] = h[i];
        for(int i = 0;i < 60; ++i){
            if(!(cur&(1ll<<i))){
                continue;
            }
            for(ll mask = cur; mask > 0; mask = (mask-1) & cur){
                if((!(mask & (1ll<<i))))
                    f[mask] += f[mask^(1ll<<i)];
            }
        }

        for(ll i = cur; i > 0; i = (i-1) & cur){
            if(f[i]>=(n+1)/2){
                bitset<60> tmp(i);
                ans = max(ans, make_pair(int(tmp.count()), tmp.to_string()));
            }
        }
    }

    cout << ans.second.substr(60-m,m) << endl;
    return 0;
}