#include <iostream>
#include <ctime>
#include <cmath>
#include <vector>
#include <random>
#include <cstring>
#include <cstdlib>
using namespace std;
const int MAXN = 2e5 + 5;
// mt19937 rng(0);
int dp[MAXN];
char s[MAXN][65];
char ans[MAXN];
int res;

inline int count_bit(int x) {
  int res = 0;
  for (int i = 0; i < 31; ++i) {
    res += !!(x & 1);
    x >>= 1;
  }
  return res;
}

int main() {
  srand(time(0));
  int n, m, p;
  cin >> n >> m >> p;
  for (int i = 1; i <= n; ++i)
    cin >> s[i];

  for (int _ = 1; _ <= 50; ++_) {
    // int t = rng() % n + 1;
    int t = (rand() << 15 | rand()) % n + 1;
    vector<int> bit;
    memset(dp, 0, sizeof dp);

    for (int i = 0; i < m; ++i) 
      if (s[t][i] == '1') bit.push_back(i);

    p = bit.size();

    for (int i = 1; i <= n; ++i) {
      int mask = 0;
      for (int j = 0; j < p; ++j) 
        mask |= ((s[i][bit[j]] - '0') << j);
      ++dp[mask];
    }

    for (int i = 0; i < p; ++i) {
      for (int j = 0; j < (1 << p); ++j) 
        if (!((1 << i) & j)) {
          dp[j] +=dp[(1 << i) | j];
        }
    }

    for (int i = 0; i < (1 << p); ++i) {
      if (dp[i] < (n + 1) / 2 || count_bit(i) < res) continue;
      for (int j = 0; j < m; ++j) ans[j] = '0';
      ans[m] = '\0';
      for (int j = 0; j < p; ++j) {
        ans[bit[j]] = '0' + ((i >> j) & 1);
      }
      res = count_bit(i);
    }
  }
  cout << ans << endl;
  return 0;
}