#include<bits/stdc++.h>
using namespace std;

//======================
//
// Template OleschY
//
// Die M�glichkeiten der deutschen Grammatik k�nnen
// einen, wenn man sich darauf, was man ruhig, wenn
// man m�chte, sollte, einl�sst, �berraschen.
// - @Gedankenbalsam
//
//======================

template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i)
    {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}

template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& p)
{
    os << "[";
    os << p.first;
    os << ", ";
    os << p.second;
    os << "]";
    return os;
}

#ifndef ONLINE_JUDGE
#define debug(x) cout << (#x) << " is " << (x) << endl
#else
#define debug(...) 42
#endif
//======================
// Solution Single testcase
//======================

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
vector<long long> like;
int dp[1<<15];
int n, m, p;

const int debugbit = 5;

long long tryPerson(int u)
{
    long long mask = like[u];

    // compress
    vector<int> bits;
    for(int i = 0; i < m; i++)
    {
        if(mask & (1ll << i))
            bits.push_back(i);
    }
    int nbits = bits.size();
    for(long long mask = 0; mask < (1ll << nbits); mask++)
    {
        dp[mask]=0;
    }
    for(int i = 0; i < like.size(); i++)
    {
        long long cntit = 0;
        for(int j = 0; j < nbits; j++)
        {
            if(like[i] & (1ll << bits[j]))
                cntit |= 1ll << j;
        }
        dp[cntit]++;
    }
    // compressed, mask is now 1111111111... and cnt according to this mask


    for(int i = 0; i < nbits; i++)
    {
        for(int mask = 0; mask < (1 << nbits); mask++)
        {
            if(mask & (1 << i))
                dp[mask - (1 << i)] += dp[mask];
        }
    }

    long long bestCurr = 0;
    for(long long mask = 0; mask < (1ll << nbits); mask++)
    {
        if(dp[mask] >= (like.size() + 1) / 2)
            if(__builtin_popcountll(mask) > __builtin_popcountll(bestCurr))
                bestCurr = mask;
    }

    // decompressed
    long long bestCurrTrans = 0;
    for(int j = 0; j < bits.size(); j++)
    {
        if(bestCurr & (1ll << j))
            bestCurrTrans |= 1ll << bits[j];
    }
    return bestCurrTrans;
}

int solve()
{
    cin >> n >> m >> p;
    like.resize(n, 0);
    for(int i = 0; i < n; ++i)
    {
        for(int j = 0; j < m; ++j)
        {
            char c;
            cin >> c;
            if(c == '1')
            {
                like[i] |= 1ll << j;
            }
        }
    }
    shuffle(like.begin(), like.end(), rng);
    long long ans = 0;
    for(int attempt = 0; attempt < min(20, (int) like.size()); attempt++)
    {
        long long tempans = tryPerson(attempt);
        if(__builtin_popcountll(tempans) > __builtin_popcountll(ans))
            ans = tempans;

    }

    for(int i = 0; i < m; i++)
    {
        if(ans & (1ll << i))
            cout << 1 ;
        else
            cout << 0 ;
    }
    cout << "\n";
    return 0;
}

//======================
// Technical stuff
//======================

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    //freopen("a.out","w",stdout); // console output is better (in most cases)
#else
    // add i/o method of specific testing system
#endif
    int ntest = 1;
    //cin >> ntest;
    for(int test = 0; test < ntest; ++test)
    {
        solve();
    }
    return 0;
}
