#pragma GCC optimize("O3")
#include<bits/stdc++.h>
#define ll long long
#define endl "\n"
#define Zzz ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
struct node
{
ll x;
ll in;
};
bool comp(node&a,node&b)
{
if(a.x==b.x)
return a.in<b.in;
return a.x<b.x;
}
void solve()
{
ll n,d,m,i,j,l,r,mid,ans=0,eht=0;
cin>>n>>d>>m;
vector<node>v(m);
for(i=0;i<m;i++)
{
cin>>v[i].x;
v[i].in=i;
}
sort(v.begin(),v.end(),comp);
l=1;
r=m;
while(l<=r)//[1,12]
{
mid=(l+r)/2;//6,
eht=mid;
j=0;
bool bo=true;
for(i=1;i<=n;i++)
{
eht=mid;
while(eht>0 and j<m)
{
if(i<v[j].x)
break;
if(i-v[j].x<=d)
j++,eht--;
else if(i-v[j].x>d)
{
bo=false;
break;
}
}
if(!bo)
break;
}
if(j<m)
bo=false;
if(bo)
r=mid-1,ans=mid;
else
l=mid+1;
}
cout<<ans<<endl;
j=0;
for(i=1;i<=n;i++)
{
eht=ans;
while(eht>0 and j<m)
{
if(i<v[j].x)
break;
if(i-v[j].x<=d)
eht--,cout<<v[j++].in+1<<' ';
}
cout<<0<<endl;
}
}
int main()
{
Zzz
ll t=1;
//cin>>t;
while(t--)
solve();
}
/*
*/