#include<bits/stdc++.h>
using namespace std;
#define ll long long
long long n,m,p;
ll wz,x,k1[1000005],k2[1000005],cnt;
long long ans;
struct node
{
long long a,id;
};
node c[1000005];
bool cmp(node l1,node l2)
{
return l1.a<l2.a;
}
ll g[1000005],len,s[1000005],k[1000005],kk[1000005];
int main()
{
// freopen("std.in","r",stdin);
// freopen("baoli.out","w",stdout);
cin>>n>>m>>p;
for(int i=1;i<=n;i++) scanf("%lld",&c[i].a),c[i].id=i;
x=c[p].a;
sort(c+1,c+n+1,cmp);
wz=n+1;
for(int i=1;i<=n;i++)
{
if(c[i].a>=0)
{
wz=i;
break;
}
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(c[i].a<0&&c[j].a>=0)
{
int lmt=m;
if(c[i].a<=x&&x<=c[j].a) lmt+=5;
if(abs(c[i].a)*2+abs(c[j].a)*2<=lmt)
{
if(ans<j-i+1)
{
ans=j-i+1;
cnt=1;
k1[cnt]=i,k2[cnt]=j;
}
if(ans==j-i+1)
{
cnt++;
k1[cnt]=i,k2[cnt]=j;
}
}
}
}
}
for(int i=1;i<=wz-1;i++)
{
ll u=0;
if(x<0&&c[i].a<=x) u=5;
if(abs(c[i].a)*2<=m+u)
{
int j=wz-1;
if(ans<j-i+1)
{
ans=j-i+1;
cnt=1;
k1[cnt]=i,k2[cnt]=j;
}
if(ans==j-i+1)
{
cnt++;
k1[cnt]=i,k2[cnt]=j;
}
break;
}
}
for(int i=n;i>=wz;i--)
{
ll u=0;
if(x>=0&&c[i].a>=x) u=5;
if(abs(c[i].a)*2<=m+u)
{
ll j=i;
i=wz;
if(ans<j-i+1)
{
ans=j-i+1;
cnt=1;
k1[cnt]=i,k2[cnt]=j;
}
if(ans==j-i+1)
{
cnt++;
k1[cnt]=i,k2[cnt]=j;
}
break;
}
}
cout<<ans<<endl;
if(ans==0)
return 0;
for(int i=1;i<=cnt;i++)
{
// cout<<k1[i]<<" "<<k2[i]<<endl;
len=0;
for(int j=k1[i];j<=k2[i];j++)
{
len++;
g[len]=c[j].id;
k[len]=c[j].id;
}
sort(g+1,g+len+1);
if(i==1)
{
for(int i=1;i<=len;i++) s[i]=g[i];
for(int i=1;i<=len;i++) kk[i]=k[i];
}else
{
bool p=false;
for(int i=1;i<=len;i++)
{
if(g[i]<s[i])
{p=true;break;
}
if(s[i]<g[i]) break;
}
if(p)
{
for(int i=1;i<=len;i++) s[i]=g[i];
for(int i=1;i<=len;i++) kk[i]=k[i];
}
}
}
for(int i=1;i<=ans;i++) cout<<kk[i]<<" ";
return 0;
}
这为什么sub2错了,3,4,对了