#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
#define ll int
#define double double long
#define fori(i,j,k) for(ll i=j; i<=k;i++)
#define study ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define pb push_back
#define all(s) s.begin(),s.end()
#define ins insert
#define ss second
#define ff first
#ifndef DB
#define DB 0
#endif
#define debugl(l) if constexpr((l)<DB)
#define debug debugl(0)
const ll sz=1e6+10;
ll INF=1e9;
ll mod=1e9+7;
void work(){
ll n,d,m;
cin>>n>>d>>m;
vector<pair<ll,ll>>v(m);
vector<ll>ig;
fori(i,0,m-1){
cin>>v[i].ff;
v[i].ss=i;
}
sort(all(v));
vector<ll>en(n+10,0),cnt(n+10,0);
fori(i,0,m-1){
cnt[v[i].ff]++;
en[v[i].ff]=i+1;
}
fori(i,1,n-d){
if(en[i]==0)
en[i]=en[i-1];
ig.pb(en[i]);
}
ll l=1,r=sz;
while(l<=r){
ll mid=(l+r)>>1;
bool ok=1;
ll cur=0;
ll pp=0;
debug{
cout<<mid<<"\n";
}
fori(i,0,m-1){
if( v[i].ff>(pp+1)){
cur=0;
pp++;
}
if((v[i].ff)<=(pp-d))
ok=0;
cur++;
debug{
cout<<v[i].ss<<" "<<pp<<" "<<cur<<endl;
}
if((cur%mid)==0){
cur=0;
pp++;
}
}
if(cur==0)
pp--;
if((pp+1)>n)
ok=0;
if(ok==0){
l=mid+1;
}
else{
r=mid-1;
}
}
/*
8 2 12
1 2 4 2 1 3 5 6 2 3 6 4
*/
ll p=r+1;
cout<<p<<endl;
ll cur=0;
ll pp=0;
fori(i,0,m-1){
while( v[i].ff>(pp+1)){
cout<<0<<endl;
cur=0;
pp++;
}
cout<<(v[i].ss+1)<<' ';
cur++;
if((cur%p)==0){
cur=0;
cout<<0<<endl;
pp++;
}
}
fori(i,1,n-pp)
cout<<0<<endl;
}
int main()
{
//#ifndef LOCAL
// freopen("log1.txt","r",stdin);
// freopen("log2.txt","w",stdout);
//#endif
study;
ll t=1;
//cin>>t;
fori(i,1,t){
work();
}
}