#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef unsigned long long ull;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll myRand(ll B) {
    return (ull)rng() % B;
}

int popcount[1<<15];

int main(){
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    int n; cin >> n;
    int p,m; cin >> m >> p;
    vector<string> s(n);
    for(int i=0;i<n;i++){
        cin >> s[i];
    }
    for(int i=0;i<(1<<15);i++){
        popcount[i]=__builtin_popcount(i);
    }
    int dw=(n+1)/2;
    ll res=0;
    int pop=0;
    for(int _=0;_<30;_++){
        int i=myRand(n);
        vector<int> v;
        for(int j=0;j<m;j++){
            if(s[i][j]=='1')v.push_back(j);
        }
        if(v.size()==0)continue;
        int sz=v.size();
        const int N=(1<<sz)-1;
        vector<int> dp(N+1);
        for(int j=0;j<n;j++){
            int bit=0;
            for(int k=0;k<sz;k++){
                if(s[j][v[k]]=='1'){
                    bit^=(1<<k);
                }
            }
            dp[bit^N]++;
        }
        for(int j=0;j<sz;j++){
            for(int k=0;k<=N;k++){
                if(k&(1<<j)){
                    dp[k]+=dp[k^(1<<j)];
                }
            }
        }
        int update=-1;
        for(int j=0;j<(1<<sz);j++){
            if(popcount[j^N]>pop and dp[j]>=dw){
                pop=popcount[j^N];
                update=(j^N);
            }
        }
        if(update>=0){
            res=0;
            for(int j=0;j<sz;j++){
                if((1<<j)&update){
                    res^=(1LL<<v[j]);
                }
            }
        }
    }
    for(int i=0;i<m;i++){
        if((1LL<<i)&res){
            cout << "1";
        }
        else{
            cout << "0";
        }
    }
    cout << endl;
}