#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <set>
#include <math.h>
#include <queue>
#include <iomanip>
#include <numeric>
#include <tuple>
#include <random>
#include <bitset>
#define int long long
using namespace std;
mt19937 ran(time(0));
int mod = 1e9 + 7;
int gcd(int a, int b) {
	if (!b)
		return a;
	return gcd(b, a % b);
}
long long Bpow(long long a, long long b) {
	long long ans = 1;
	while (b) {
		if (b & 1) {
			ans *= a;
			ans %= mod;
		}
		a = a * a % mod;
		b >>= 1;
	}
	return ans;
}
vector<vector<int>>sub(4e4);
int32_t main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n, m, p;
	cin >> n >> m >> p;
	for (int mask = 0; mask < 1<<15; mask++)
	{
		for (int s = mask; ; s=(s-1)&mask)
		{
			sub[s].push_back(mask);
			if (!s)
				break;
		}
	}
	vector<string>s(n);
	for (int i = 0; i < n; i++)
	{
		cin >> s[i];
	}
	int ans = 0;
	int ms = 0;
	for (int i = 0; i < 8; i++)
	{
		int ind = ran() % n;
		vector<int>p;
		for (int j = 0; j < m; j++)
		{
			if (s[ind][j] - '0')
				p.push_back(j);
		}
		vector<int>a(4e4);
		for (int j = 0; j < n; j++)
		{
			int now = 0;
			for (int k = 0; k < p.size(); k++)
			{
				if (s[j][p[k]] - '0')
					now |= (int)1 << k;
			}
			a[now]++;
		}
		for (int j = 0; j < (int)1<<(int)p.size(); j++)
		{
			int now = 0;
			for (auto& s : sub[j])
				now += a[s];
			if (now * 2 >= n) {
				int kol = 0;
				int ne = 0;
				for (int k = 0; k < p.size(); k++)
				{
					if (j & ((int)1 << k)) {
						kol++;
						ne |= (int)1 << p[k];
					}
				}
				if (kol > ans) {
					ans = kol;
					ms = ne;
				}
			}
		}
	}
	string v;
	for (int i = 0; i < m; i++)
	{
		if (ms & ((int)1 << i))
			v.push_back('1');
		else
			v.push_back('0');
	}
	cout << v;
}