#include <bits/stdc++.h>
using pii=std::pair<int,int>;
using namespace std;

const int maxn = 42;

int n, xs, ys, x[maxn], y[maxn];

vector<pair<pii, pii>> solve(int from, int till)
{
    assert(till >= from);
    int sz = (till - from + 1);
    vector<pair<pii, int>> cnt;
    for(int mask = 0; mask < (1ll << sz); mask++)
    {
        int steps = __builtin_popcount(mask);
        int curx = 0, cury = 0;
        for(int j = 0; j < sz; j++)
            if(mask & (1ll << j))
            {
                curx += x[from + j];
                cury += y[from + j];
            }
        cnt.push_back({{curx, cury}, steps});
    }
    sort(cnt.begin(), cnt.end());
    vector<pair<pii, pii>> uniq_cnt;
    for(int i = 0; i < cnt.size(); i++)
    {
        int j = i;
        while(j + 1 < cnt.size() && cnt[j + 1] == cnt[i])
            j++;
        uniq_cnt.push_back({cnt[i].first, {cnt[i].second, j - i + 1}});
        i = j;
    }
    return uniq_cnt;
}

int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> xs >> ys;
    for(int i = 1; i <= n; i++)
        cin >> x[i] >> y[i];
    if(n == 1)
    {
        cout << (x[1] == xs && y[1] == ys) << "\n";
        return 0;
    }
    int mid = n / 2;
    auto cnt1 = solve(1, mid);
    auto cnt2 = solve(mid + 1, n);
    vector<long long> ans(n + 1, 0);
    reverse(cnt2.begin(), cnt2.end());
    for(int i = 0; i < cnt1.size(); i++)
    {
        int from1 = i, till1 = i;
        while(till1 + 1 < cnt1.size() && cnt1[till1 + 1].first == cnt1[from1].first)
            till1++;
        int from2 = lower_bound(cnt2.begin(), cnt2.end(), make_pair(make_pair(xs - cnt1[i].first.first, ys - cnt1[i].first.second), make_pair(n, 1000000000)), greater<>()) - cnt2.begin();
        int till2 = from2 - 1;
        while(till2 + 1 < cnt2.size() && cnt1[from1].first.first + cnt2[till2 + 1].first.first == xs && cnt1[from1].first.second + cnt2[till2 + 1].first.second == ys)
            till2++;
        for(int j = from1; j <= till1; j++)
            for(int k = from2; k <= till2; k++)
                ans[cnt1[j].second.first + cnt2[k].second.first] += cnt1[j].second.second * 1ll * cnt2[k].second.second;
        i = till1;
    }
    for(int i = 1; i <= n; i++)
        cout << ans[i] << "\n";
    return 0;
}