#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;
bool state[200009][70],res[70];
int cnt[100009];
mt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
int rng(int l, int r) {
    uniform_int_distribution<int> uni(l, r);
    return uni(mt);
}
int count(int x){
    int ans=0;
    while(x){
        if(x&1) ans++;
        x>>=1;
    }
    return ans;
}
void solve(){
    int n,m,p1,x;
    scanf("%d%d%d",&n,&m,&p1);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%1d",&x);
            if(x) state[i][j]=1;
        }
    }
    int t=10,maxn=0;
    while(t--){
        x=rng(1,n);
        vector<int> p;
        for(int i=1;i<=m;i++){
            if(state[x][i]) p.push_back(i);
        }
        int k=p.size();
        for(int i=1;i<(1<<k);i++) cnt[i]=0;
        for(int i=1;i<=n;i++){
            int tmp=0,jud=1;
            for(int j=0;j<k;j++,jud<<=1){
                if(state[i][p[j]]) tmp+=jud;
            }
            cnt[tmp]++;//统计以随机人为基准的状态
        }
        for(int jud=1;jud<(1<<k);jud<<=1){
            for(int i=(1<<k)-1;i>=0;i--){
                if(i&jud){
                    cnt[i-jud]+=cnt[i];
                }
            }
        }
        int tmp=0;
        for(int i=1;i<(1<<k);i++){
            if(cnt[i]>=(n+1)/2 && count(i)>count(tmp)){
                tmp=i;
            }
        }
        if(count(tmp)> count(maxn)){
            maxn=tmp;
            for(int i=1;i<=m;i++) res[i]=0;
            int jud=1;
            for(int i=0;i<k;i++,jud<<=1){
                if(tmp&jud){
                    res[p[i]]=1;
                }
            }
        }
    }
    for(int i=1;i<=m;i++){
        if(res[i]) printf("1"); else printf("0");
    }
    puts("");
}
int main(){
    int t=1;
    //scanf("%d",&t);
    while(t--){
        solve();
    }
}