public class number
{ 
   static long max = 1000;
//_____________________________________________________________
public static final void main(String[] args)
{
   if (args.length > 0) max = Long.parseLong(args[0]);
   System.out.println("max = " + max);
   long t1 = System.nanoTime();
   number bnk = new number();
   bnk.start(3,7,37,73);
   bnk.start(2,5,25,52);
   long t2 = System.nanoTime();
   System.out.println("seconds = " + ((t2-t1) / 1e9));
}
//_______________________________________________________________
long sod(long val)
{
   long total = 0;
   String s = Long.toString(val);
   for (int i = 0; i < s.length(); i++)
   {
      int v = Integer.parseInt(s.substring(i,i+1));
      total += v;
   }
   return(total);
}
//___________________________________________________________________________
void start(int a, int b, int c, int d)
{
   System.out.println(a + " " + b + " " + c + " " + d);
   for (long i = 1; i < max; i++)
   {
      String sc = Long.toString(c);
      String sd = Integer.toString(d);
      long sdd = sod(i);
      String look = sd + Long.toString(i) + sc;
      long vlook = Long.parseLong(look);
      long vk = sod(vlook);
      boolean doit = true;
      if (vlook % b != 0) doit = false;
      if (vlook % c != 0) doit=false;
      if (vlook % sdd != 0) doit=false;
      if (vlook % d != 0) doit=false;
      if (vlook % (sdd+a+a) != 0) doit=false;
      if (vk % c != 0) doit=false;
      if (doit) System.out.println("\t" + vlook + " " + i + " " + sod(i));
   }
}
}//__________________________________________________________________________
