#include <bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define N int(1e6)
using namespace std;
ll n, d, m;
struct dl
{
ll bd, kt, id;
};
vector<dl> a[N+10];
bool operator>(const dl& a, const dl& b)
{
return a.bd > b.bd;
}
bool kt(ll cnt)
{
priority_queue<dl, vector<dl>, greater<dl>>pq;
ll cv=1, day=1;
for(int i=1; i<=n; i++)
{
for(auto [x, y, z]:a[i])
{
if(pq.size()<cnt) pq.push({x, y});
if(pq.size()==cnt)
{
while(!pq.empty())
{
dl x=pq.top();
if(x.kt<day) return 0;
pq.pop();
}
day++;
}
}
}
day-=1;
return day<=(n+d);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>d>>m;
for(int i=1; i<=m; i++)
{
ll x;
cin>>x;
a[x].push_back({x, x+d, i});
//cout<<x<<" "<<x+d<<'\n';
}
//for(auto x:a[1]) cout<<x.fi<< " "<<x.se<<'\n';
//for(int i=1; i<=n; i++) sort(a[i].begin(), a[i].end());
// for(int i=1; i<=n; i++)
// {
// cout<<i<<'\n';
// for(auto [x, y, z]:a[i]) cout<<x<<" "<<y<<" "<<z<<'\n';
// }
// cout<<a[1].size();
ll l=1, r=n;
ll ans=0;
while(l<=r)
{
ll mid=(l+r)/2;
if(kt(mid))
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
cout<<ans<<'\n';
ll cnt=ans;
ll day=1;
priority_queue<dl, vector<dl>, greater<dl>>pq;
for(int i=1; i<=n; i++)
{
for(auto [x, y, id]:a[i])
{
if(pq.size()<cnt) pq.push({x, y, id});
if(pq.size()==cnt)
{
while(!pq.empty())
{
dl x=pq.top();
cout<<x.id<<" ";
pq.pop();
}
day++;
cout<<0<<'\n';
}
}
}
for(int i=day;i<=n;i++) cout<<0<<'\n';
return 0;
}