add_rewrite_rule isnt working, not getting added to rules array, why?

Try this. You also don’t want to include $wp_rewrite->flush_rules() inside your function as that would flush on every page load.

add_action('rewrite_rules_array', 'new_rewrite_rules');

function new_rewrite_rules($rules){
        $newrules = array();
        $newrules[ '^lists/([^/]*)/([^/]*)/?' = 'index.php?lists=$matches[1]&post=$matches[2]';
        return $newrules + $rules;
    }

If you want to flush the rules only once then try this:

add_action('init', 'flush_new_rule');

function flush_new_rule(){
   global $wp_rewrite;
   if(is_array(get_option('rewrite_rules')) && !array_key_exists('^lists/([^/]*)/([^/]*)/?$', get_option('rewrite_rules')){
   $wp_rewrite->flush_rules( true );
   };
}