I am new here. What is wrong with this solution?
import java.util.*;
import java.io.*;
class CODEM5{
Integer array[];
CODEM5(int n)throws IOException{
array=new Integer[n];
BufferedReader sc=new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<n;i++)
{
array[i]=Integer.parseInt(sc.readLine());
}
Arrays.sort(array, Collections.reverseOrder());
}
int findpos(int p,int k){
int i=0;
for(i=p;i<=(array.length-1)&&array[i]>k;i++)
;
return i;
}
int process(int beg,int end,int k){
if(array[beg]==k)
return 1;
else
{
int pos=findpos(beg+1,k-array[beg]);
if(pos==end)
return 100;
else{
int minval=0;
minval=process(pos,end,k-array[beg]);
for(;pos<end;pos++)
minval=Math.min(process(pos,end,k-array[beg]), minval);
return (1+minval);
}
}
}
public static void main(String[] args)throws IOException {
BufferedReader sc=new BufferedReader(new InputStreamReader(System.in));
int t=Integer.parseInt(sc.readLine());
CODEM5 obj;
while(t--!=0){
int n=Integer.parseInt(sc.readLine());
int k=Integer.parseInt(sc.readLine());
obj=new CODEM5(n);
int p=obj.findpos(0,k);
if(p==(n))
System.out.println("impossible");
else if(obj.array[p]==k)
System.out.println("1");
else {
int minval=0;
minval=obj.process(p,n,k);
for(;p<n;p++)
minval=Math.min(obj.process(p,n,k), minval);
if(minval>=100)
System.out.println("impossible");
else
System.out.println(minval);
}
obj=null;
}
}
}