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

const int MAXN = 100005;
const int MAXM = 1000005;

int n, d, m;
vector<int> a[MAXN];
int bd[MAXM];

bool kt(int cnt)
{
    queue<int> q;

    for (int i = 1; i <= n; i++)
    {
        for (int id : a[i])  q.push(bd[id]);

        int sl = 0;
        while (!q.empty() && sl < cnt)
        {
            if (i > q.front() + d) return 0;
            q.pop();
            sl++;
        }

        if (!q.empty() && i > q.front() + d) return 0;
    }
    return q.empty();
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>d>>m;
    for (int i = 1; i <= m; i++)
    {
        int x;
        cin >> x;
        a[x].push_back(i);
        bd[i] = x;
    }

    int l = 1, r = m, ans = m;
    while (l <= r)
    {
        int mid = l + (r - l) / 2;
        if (kt(mid))
        {
            r = mid - 1;
             ans = mid;
        }
        else l = mid + 1;

    }

    cout << ans << '\n';

    queue<int> q;
    for (int i = 1; i <= n; i++)
    {

        for (int id : a[i]) q.push(id);
        int sl = 0;
        while (!q.empty() && sl < ans)
        {
            cout << q.front() << " ";
            q.pop();
            sl++;
        }
        cout << 0<<'\n';
    }

    return 0;
}
