#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;
}